如何在DataGrid中更改ComboBox的ItemsSource?

时间:2011-03-01 07:15:40

标签: c# wpf mvvm

场景:我的View中有一个ContentControl,其Content属性与ViewModel中的DataGrid绑定。我将在运行时找出DataGrid中显示的确切列数,这就是我在ViewModel中以程序方式创建DataGrid的原因。我的DataGrid的ItemsSource是一个DataTable。我将DataGrid的'AutoGeneratingColumns'设置为False,我手动创建列。我的DataGrid以及许多其他列都有两个ComboBox类型列。我必须根据第一个ComboBox的选定索引更改第二个ComboBox的ItemsSource。因此,我的DataGrid的每一行都可以为第二个ComboBox提供不同的ItemsSource。

我的问题是如何在DataGrid的单行中基于运行时第一个ComboBox中的选定索引动态更改第二个ComboBox的ItemsSource?我还想知道在这种情况下是否有比现有方法更好的解决方案?

1 个答案:

答案 0 :(得分:0)

如果您使用的是viewmodel,那就不那么难了。 将组合框itemssources绑定到viewmodel上的属性。 将第一个组合框的selecteditem绑定到viewmodel上的属性。 在该属性的setter中,更改第二个组合框的集合。

使用viewmodels,这是最简单的方法。 虽然在视图中创建datagrid列不是,但您可以将其移动到辅助类并从后面的代码或子类te datagrid中调用它。 我知道,运行时列很难。

<强>更新 我通常做的是在显示数据时使用普通列,并在选中的行上使用组合框。那样你就不会有这个问题了 当datagrid的selecteditem发生更改时,您必须同步selecteditemproperty。这也将触发第二个组合框的项目源的更新

另一个选择是在主集合中创建组合框子集合并预先填充它们。并且在组合框1中所选项目的更改上更改组合框2的集合。但这可能是很多工作和存储。