2011-03-01 119 views
0

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

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

+0

假设您的视图模型中有多个集合可用作第二个组合框的Item Source,那么这些常见类型的集合呢?如果是,那么你可以创建一个像SelectedCollection这样的属性,并根据第一个组合框的选定项来设置它的值。并将您的第二个组合框项目源绑定到此SelectedCollection属性。 – RockWorld 2011-03-01 11:26:52

回答

0

如果你使用视图模型,这并不难。 将组合框itemssources绑定到视图模型上的属性。 将第一个组合框的selecteditem绑定到视图模型上的属性。 在该属性的设置器中,更改第二个组合框的集合。

使用viewmodels,这是最简单的方法。 尽管在你的view中创建datagrid列不是,你可以将它移动到一个辅助类,并从后面的代码或子类te datagrid调用它。我知道,使用运行时列很难。

更新: 我通常做的是显示数据时,以及在其上选择的行组合框正常使用的列。这样你就不会有这个问题 你必须在数据网格的selecteditem更改时同步selecteditemproperty。这也会触发第二个组合框的itemssource的更新

另一种选择是对主集合中的组合框子项进行集合并预填充它们。然后在组合框1中选择项目的更改上更改组合框2的集合。但是,这可能会有很大的工作量和存储空间。

+0

我对这种方法有一个疑问/困惑。比方说,我在我的视图模型中创建一个属性'SelectedItemProperty',并设置我的第一个组合框的SelectedItem = SelectedItemProperty。我的想法是,我的DataGrid的每一行将使用SelectedItemProperty的相同实例,是不是这种情况?如果每行中的ComboBox绑定到相同的属性不会导致问题? – 2011-03-01 09:16:12

+0

啊,是的,这可能是一个问题。我通常所做的是在显示数据时使用普通列,并在所选行中使用组合框。这样你就不会有这个问题。 – MarcelDevG 2011-03-01 11:30:26

+0

在这种情况下,无论何时您将进入CombobBox模式或编辑模式,首先ComboBox的选定项目始终为'SelectedItemProperty',而不是用户在非编辑模式下选择的项目。对最终用户而言,这可能会造成问题/困惑。 – 2011-03-01 11:49:55

相关问题