我有以下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