我有以下 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>
我在 Binding 中使用的 FamilyList 属性是我的 View 模型类中实体的 ObservableCollection。我发现我需要在我的 FamilyList 集合的 setter 中实现 INotifyPropertyChanged,否则绑定(bind)不起作用。我的理解是 ObservableCollection 已经实现了这一点。如果是这种情况,为什么我需要实现 notify 属性?
如果有帮助,这是我的 FamilyList 属性定义:
private ObservableCollection<Services.Family> familyList;
public ObservableCollection<Services.Family> FamilyList
{
get { return familyList; }
private set
{
familyList = value;
NotifyPropertyChanged("FamilyList");
}
}
最佳答案
ObservableCollection<T>
实现 INotifyCollectionChanged
它通知已注册的事件处理程序有关集合中的更改(添加、删除、排序项目)。然而 DataGrid
必须知道您的业务对象之一的属性是否已更改以更新网格中的值。为此,INotifyPropertyChanged
是需要的。ObservableCollection<T>
还实现 INotifyCollectionChanged
.但是,这只能用于在集合的属性已更改时得到通知。没有任何机制可以让集合检测您的业务对象是否已更改(如果有,它将注册到您的业务对象的 INotifyCollectionChanged :)。
关于wpf - MVVM/ObservableCollection 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123537/