gpt4 book ai didi

wpf - MVVM/ObservableCollection 问题

转载 作者:行者123 更新时间:2023-12-04 22:51:17 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com