我是MVVM的初学者。主窗口使用WPF Toolkit中的库存DataGrid。它具有一个View Model,并仅依赖于.xaml.cs文件中的DataContext_Changed事件处理程序。主窗口的DataContext是View Model。窗口加载和连接更改后,将WPF Toolkit DataGrid ComboBox列绑定到Linq-to-Sql集合?
我试图将DataGridComboBoxColumn的ItemsSource属性绑定到视图模型上的CLR属性“FieldTypes”。 “FieldTypes”是一个从FieldType类型的Linq到Sql表派生的List。 DataGrid的ItemsSource来自一个System.Data.Linq.Table,而“FieldTypes”来自单独的表,而这两个表有没有关系。
要绑定域类型DataGridComboBoxColumn对视图模型的“域类型”属性,我创建了一个DataGridTemplateColumn使用一个DataTemplate的StaticResource:
<DataTemplate x:Key='FieldTypeCombo' >
<ComboBox DataContext='{Binding ElementName=window, Mode=OneWay, Path=DataContext, UpdateSourceTrigger=PropertyChanged}'
ItemsSource='{Binding FieldTypes}'
DisplayMemberPath='Name'
/>
</DataTemplate>
事实证明,这个DataTemplate中将工作的主窗口的子元素不在DataGrid中,例如在HeaderedContentControl.ContentTemplate中,但而不是在DataGridTemplateColumn.CellTemplate中工作。
,如果我尝试绑定DataGridComboBoxColumn到正规的ComboBox的不DataGrid中ComboBox.ItemsSource财产,
<c:DataGridComboBoxColumn Header="FieldType"
ItemsSource="{Binding ElementName=regularcombobox, Path=ItemsSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
它能正常工作,但不适合在数据网格中组合框。
我想尽可能多地在视图模型的属性上绑定数据,但这看起来也是一个StaticResource的机会。然而,在窗口加载之后,这个StaticResource会改变,因为连接字符串直到后面才知道。即使在将ComboBox列的ItemsSource绑定到StaticResource时,我也没有运气或者DynamicResource。
是否有某种方法使用MVVM来完成DataGrid组合框列与DataGrid的ItemsSource之间的集合的绑定?或者是否有一种方法可以通过StaticResource完成此操作,即使窗口加载后SQL连接发生更改?
工作。我没有意识到ElementName的问题。我也看了南斯里奇的例子 (http://blogs.msdn.com/jaimer/archive/2009/02/10/mv-vm-training-day-sample-application-and-decks.aspx) 其中在名为“间谍”的Grid.Resources中使用了一个StaticResource,它似乎起作用。 – 2010-02-08 19:01:22