Ran*_*der 4 silverlight wpf mvvm
我有以下XAML:
<Grid x:Name="LayoutRoot">
<sdk:DataGrid AutoGenerateColumns="True" Margin="46,38,0,40" x:Name="FamilyListGrid" HorizontalAlignment="Left" Width="475"
ItemsSource="{Binding FamilyList}"
SelectedItem="{Binding SelectedFamily, Mode=TwoWay}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
Binding中使用的我的FamilyList属性是我的视图模型类中的实体的ObservableCollection.我发现我需要在我的FamilyList集合的setter中实现INotifyPropertyChanged,否则绑定不起作用.我的理解是ObservableCollection已经实现了这一点.如果是这种情况,为什么我需要实现notify属性?
如果有帮助,这是我的FamilyList属性定义:
private ObservableCollection<Services.Family> familyList;
public ObservableCollection<Services.Family> FamilyList
{
get { return familyList; }
private set
{
familyList = value;
NotifyPropertyChanged("FamilyList");
}
}
Run Code Online (Sandbox Code Playgroud)
ObservableCollection<T>
实现INotifyCollectionChanged
,它通知已注册的事件处理程序有关集合中的更改(添加,删除,排序项).但是,DataGrid
必须知道您的某个业务对象的属性是否已更改为更新网格中的值.为此,INotifyPropertyChanged
需要.
ObservableCollection<T>
实现也INotifyCollectionChanged
.但是,如果集合的属性已更改,则只能用于通知.没有机制让集合检测您的业务对象是否已更改(如果它已经更改,它将注册到您的业务对象的INotifyCollectionChanged :).