我有以下XAML:Silverlight - 从DataGrid列绑定回视图模型的根属性?
<UserControl.Resources>
<local:MainPageViewModel x:Key="ViewModel" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot"
DataContext="{Binding Source={StaticResource ViewModel}}">
<sdk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Items}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="ID" Binding="{Binding ID}" />
<sdk:DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<sdk:DataGridCheckBoxColumn
Header="Checkbox Column"
Binding="{Binding Source={StaticResource ViewModel},
Path=SomeBooleanProperty}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
所以,基本上我想有一列(复选框列)绑定到其他属性(SomeBooleanProperty),其直接作用于视图模型,而不是一个属性在Items集合中的其中一个项目上。 (是的这是有点人为的,但它得到了我的问题。)问题是,根据我的测试,如果你通过StaticResource绑定,它似乎不基于INotifyPropertyChanged事件触发更新值。初始值是正确的,但它永远不会改变。我找不到另一种方法从列绑定中取出“绑定”项并将其备份到ViewModel。
我认为,在WPF中,你可以用一个使用FindAncestor的RelativeBinding来做到这一点。但是Silverlight中不存在该功能。还有其他方法可以完成这个吗?
+1好问题!你现在也好奇我。你能否简单地确定属性名称不是你的项目源中存在的属性?如果该属性不是该项目源的成员,我认为它默认为视图模型。 – 2010-11-11 16:04:59
您能否提供一些您的源代码。我试着用你的xaml工作。也许你的一些ViewModel源代码可以帮助你找到问题。 – TerenceJackson 2010-11-11 18:00:17
@TerenceJackson:看起来你是对的。我重建了页面,它工作。请参阅下面的答案。 – RationalGeek 2010-11-12 13:17:46