のウィンドウがありますprivate List<Tuple<string, string, char>> _trasitions
。同じウィンドウに とDataGrid
呼ばれるがありdataTrans
ます。(できれば XAML で) にバインドする方法_transitions
はdataTrans.ItemsSource
?
3 に答える
ここでサンプルコードを見ることができます:あなたがしなければならないでしょう。
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;
}
}
}
}
コレクションにバインドするには、コレクションをパブリック プロパティとして公開する必要があります。
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を参照してください。
それは可能ではありません。2つの理由
- プロパティのみをバインドできます。
- プロパティはパブリックである必要があります。
詳細については、こちらをご覧ください
したがって、私が見る唯一のオプションは、devdigitalが既に投稿されているように、フィールドをプロパティでラップすることです。