我是MVVM的初学者。主窗口使用WPF工具箱中的股票数据报。它有一个视图模型,并且只依赖.xaml.cs文件中的DataContext_Changed事件处理程序。主窗口的DataContext是视图模型。
我正在尝试将DataGridComboxColumn的itemsSource属性绑定到视图模型上的CLR属性“FieldTypes”。fieldtypes”是从fieldtype类型的linq to sql表派生的列表。
数据报的itemssource来自一个system.data.linq.table,“fieldtypes”来自
分离
桌子,这两张桌子
没有关系
.
要将FieldTypes DataGridComboxColumn绑定到视图模型上的“FieldTypes”属性,我创建了一个要在DataGridTemplateColumn中使用的DataTemplate静态资源:
<DataTemplate x:Key='FieldTypeCombo' >
<ComboBox DataContext='{Binding ElementName=window, Mode=OneWay, Path=DataContext, UpdateSourceTrigger=PropertyChanged}'
ItemsSource='{Binding FieldTypes}'
DisplayMemberPath='Name'
/>
</DataTemplate>
结果发现这个数据模板
将
在主窗口的子元素上工作,而不是在DataGrid中,例如在HeaderedContentControl.ContentTemplate中,但将
不
在DataGridTemplateColumn.CellTemplate中工作。
如果尝试将DataGridComboBoxColumn绑定到不在DataGrid中的常规ComboBox的ComboBox.itemsSource属性,
<c:DataGridComboBoxColumn Header="FieldType"
ItemsSource="{Binding ElementName=regularcombobox, Path=ItemsSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
它按预期工作,但不适用于DataGrid中的组合框。
我希望对视图模型的属性进行尽可能多的数据绑定,但这看起来也是一个静态资源的机会。但是,在窗口加载之后,这个静态资源会发生变化,因为直到加载之后才知道连接字符串。即使在将ComboBox列的itemssource绑定到StaticResource时,我也没有遇到过这种情况,也没有遇到过DynamicResource。
是否有某种方法可以使用MVVM将DataGrid组合框列绑定到独立于DataGrid的项源的集合?或者,有没有一种方法可以通过静态资源来实现这一点,即使SQL连接在窗口加载后发生了更改?