0

のウィンドウがありますprivate List<Tuple<string, string, char>> _trasitions。同じウィンドウに とDataGrid呼ばれるがありdataTransます。(できれば XAML で) にバインドする方法_transitionsdataTrans.ItemsSource?

4

3 に答える 3

1

ここでサンプルコードを見ることができます:あなたがしなければならないでしょう。
1. リストをビューモデル クラスに移動します。
2. そのリストのパブリック プロパティを公開します。
3. ウィンドウのデータ コンテキストをビューモデル クラスのインスタンスに設定します。
4. プロパティを XAML のデータグリッドの ItemSource にバインドします。 XAML
以下のサンプル コード :

<Window x:Class="TestWPFApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:TestWPFApp"
        Title="MainWindow" Height="350" Width="525">

    <Grid>
        <DataGrid ItemsSource="{Binding Transitions}" AutoGenerateColumns="False" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="firstColumn" Header="First" Binding="{Binding Path=Item1, Mode= OneWay}"></DataGridTextColumn>
                <DataGridTextColumn x:Name="secondColumn" Header="Second" Binding="{Binding Path=Item2, Mode= OneWay}"></DataGridTextColumn>
                <DataGridTextColumn x:Name="thirdColumn" Header="Third" Binding="{Binding Path=Item3, Mode= OneWay}"></DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

コードビハインド:

using System.Windows;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System;
namespace TestWPFApp
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainViewModel();
        }
    }

    public class MainViewModel
    {
        private List<Tuple<string, string, char>> _transitions = new List<Tuple<string, string, char>>();

        public MainViewModel()
        {
            Transitions.Add(new Tuple<string,string,char>("First Item 1","Second Item 1",'A'));
            Transitions.Add(new Tuple<string, string, char>("First Item 2", "Second Item 2", 'B'));
            Transitions.Add(new Tuple<string, string, char>("First Item 3", "Second Item 3", 'C'));
            Transitions.Add(new Tuple<string, string, char>("First Item 4", "Second Item 4", 'D'));
        }
        public List<Tuple<string, string, char>> Transitions
        {
            get { return _transitions; }
            set
            {
                _transitions = value;
            }
        }        
    }
}
于 2013-05-22T09:20:57.400 に答える
1

コレクションにバインドするには、コレクションをパブリック プロパティとして公開する必要があります。

public List<Tuple<string, string, char>> Transitions
{
    get { return this.transitions };
}

を使用するのではなく型を定義することもお勧めしTupleます。コレクションの変更を UI に通知する場合は、コレクションをObservableCollectionではなくにする必要がありListます。

コレクションの参照が変更された場合は、参照が変更されたときに (セッターなどで) イベントを実装INotifyPropertyChangedして呼び出す必要もあります。PropertyChanged

をバインドするDataGridには、そのItemsSourceプロパティを設定します。

<DataGrid ItemsSource="{Binding Transitions}" ... />

のデータ コンテキストがDataGridビュー モデルのインスタンスであることを確認する必要があります。詳細については、 http://wpftutorial.net/DataGrid.htmlを参照してください。

于 2013-05-22T09:11:27.430 に答える
0

それは可能ではありません。2つの理由

  • プロパティのみをバインドできます。
  • プロパティはパブリックである必要があります。

詳細については、こちらをご覧ください

したがって、私が見る唯一のオプションは、devdigitalが既に投稿されているように、フィールドをプロパティでラップすることです。

于 2013-05-22T09:13:01.667 に答える