私はDatagridと親DataGrid内にネストされた別のDataGridを持っています。子DataGridのItemSourceを親DataContextのプロパティとして設定する必要があります。親のdatacontextを取得するために子項目ソースのRelativeSourceを使用しようとしました。「ItemsSourceを使用する前にアイテムコレクションを空にする必要があります。 WPFで子DataGridのitemsourceを設定しようとしています
XAMLコード
<DataGrid Grid.Row ="1" x:Name="Grid1" ItemsSource="{Binding Path=md,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Categogy" Width="100" Binding="{Binding Path =CateName,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridTemplateColumn Header="Characterictics" Width="300">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding DataContext.list, RelativeSource={RelativeSource AncestorType=DataGrid}}">
<DataGridTextColumn Binding="{Binding DataContext.list.Name, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</DataGrid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
のViewModel
Model m = new Model();
m.CateName = "CategoryName";
m.list.Add(new Characteristics() { Name="XX", Value="00"});
m.list.Add(new Characteristics() { Name = "XX", Value = "00" });
m.list.Add(new Characteristics() { Name = "XX", Value = "00" });
md.Add(m);
Model m1 = new Model();
m1.CateName = "CategoryName1";
m1.list.Add(new Characteristics() { Name = "XX", Value = "00" });
m1.list.Add(new Characteristics() { Name = "XX", Value = "00" });
m1.list.Add(new Characteristics() { Name = "XX", Value = "00" });
md.Add(m1);
list = new ObservableCollection<Characteristics>();
list.Add(new Characteristics() { Name = "XX", Value = "00" });
list.Add(new Characteristics() { Name = "XX", Value = "00" });
特性クラスは、プロパティ名とモデルを持っています。
今、「ItemsSourceを使用する前にItemsコレクションが空である必要があります」というような例外が発生しています。
どこが間違っているのかわかりません。 誰かが、子のdataGrid Itemsourceを正しくバインドするのを手伝ってもらえますか? <DataGrid.Columns>
タグ
<DataGrid ItemsSource="{Binding list}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
にネストされたデータグリッド場所DataGridTextColumn
ため
感謝を!を追加すると、例外を回避できました。しかし、子DataGridのバインディングは機能しません。私はを使ってあなたの意見を聞きました。しかし、グリッドにはデータはありません。 –
@SudiptaSahaは、カテゴリ(CateName)が正しくバインドされている最初の列ですか?親DataGridのdataContextと特に 'md'を表示してください。 *フィールド* – ASh
カテゴリが第1列に適切に表示されているのではなく、getter/setter everythereでpublic * properties *を持っていることを確認してください。私は私のviewmodelで定義されたmdという名前のパブリックプロパティで親のDataGridをバインドしました。私が使用しているモデルは次のようなものです:public class Model { 公開ストリングCateName { get; set; } private ObservableCollection <特性> _list = new ObservableCollection <特性>(); public ObservableCollection <特性>リスト { get {return _list; } セット{ _list = value; } } } –