我的想法是我有LoadGroup和LoadCase。它们可以由用户添加或删除。但是loadcase必须是loadgroup的子代。
我制作了2个datagridcombocolumns。我试图让第二个(detialed)datagridcombocolumn根据第一列中选定的load-group动态更新itemssouce。我找了一会儿。但我无法找到一个相对简单的解决方案来使我的数据模型工作。
数据模型是:
public class LoadList
{
public int ID { get; set; }
public string Name { get; set; }
public ObservableCollection<LoadList> Children { get; set;}
public LoadList()
{
Children = new ObservableCollection<LoadList>();
}
}
ViewModel 是:
{
ObservableCollection<LoadList> loadgrouplist = new ObservableCollection<LoadList>();
DG_test.ItemsSource = loadgrouplist;
}
我将一些示例数据放入了viewmodel。
loadgrouplist.Add(new LoadList { ID = 2, Name = "Load Group 1" });
loadgrouplist.Add(new LoadList { ID = 2, Name = "Load Group 2" });
loadgrouplist[0].Children.Add(new LoadList{ID =3 , Name = "Load Case 1"});
loadgrouplist[0].Children.Add(new LoadList { ID = 3, Name = "Load Case 2" });
loadgrouplist[1].Children.Add(new LoadList { ID = 3, Name = "Load Case 3" });
loadgrouplist[1].Children.Add(new LoadList { ID = 3, Name = "Load Case 4" });
我尝试过不同类型的方法让这个东西起作用。 我尝试过的最新版本是这样的: XAML文件
<DataGrid x:Name="DG_test" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Dads Name" Binding="{Binding Name}" />
<DataGridComboBoxColumn x:Name="test_loadgroup" Header="Load Group" DisplayMemberPath="Name" ItemsSource="{Binding Path=Name}" />
<mui:DataGridComboBoxColumn x:Name="test_mui_loadgroup" Header="MUI Load Group" DisplayMemberPath="Name" ItemsSource="{Binding Path=Name}" />
<DataGridTemplateColumn Header="Group Name">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="test_loadgroup" Text="{Binding Path=Name}" DataContext="{Binding Path=Name}" DisplayMemberPath="Name" ItemsSource="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn x:Name="test_loadcase" Header="Child Name">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox Text="{Binding Path=Name}" DisplayMemberPath="Name" ItemsSource="{Binding Path=Children}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我怎样才能让这件事有用? 非常感谢