gpt4 book ai didi

c# - ObservableCollection 和 Item PropertyChanged

转载 作者:IT王子 更新时间:2023-10-29 03:53:37 26 4
gpt4 key购买 nike

我已经看到很多关于这个问题的讨论,但也许我只是一个新手,无法理解它。如果我有一个可观察的集合,它是 msdn 示例 ( http: //msdn.microsoft.com/en-us/library/ms748365.aspx ) 中“PersonNames”的集合,如果添加或删除 PersonName 等,我会更新我的 View ,等等。我想要当我更改 PersonName 中的属性时,也可以更新我的 View 。就像我更改名字一样。我可以为每个属性实现 OnPropertyChanged 并让此类从 INotifyPropertyChanged 派生,这似乎按预期被调用。

我的问题是,View 如何从 ObservableCollection 获取更新的数据,因为属性更改不会导致 ObservableCollection 发生任何事件?

这可能是一件非常简单的事情,但为什么我似乎找不到一个例子让我感到惊讶。任何人都可以为我阐明这一点,或者对示例有任何指示,我将不胜感激。我们在当前的 WPF 应用程序中的多个位置都有这种情况,并且正在努力解决它。


“通常,负责显示数据的代码会向当前显示在屏幕上的每个对象添加一个 PropertyChanged 事件处理程序。”

谁能给我举个例子说明这是什么意思?我的 View 绑定(bind)到我的 ViewModel,它有一个 ObservableCollection。此集合由 RowViewModel 组成,它具有支持 PropertiesChanged 事件的属性。但我不知道如何使集合更新本身,以便更新我的 View 。

最佳答案

以下是您将如何附加/分离每个项目的 PropertyChanged 事件。

ObservableCollection<INotifyPropertyChanged> items = new ObservableCollection<INotifyPropertyChanged>();
items.CollectionChanged += items_CollectionChanged;

static void items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
{
foreach (INotifyPropertyChanged item in e.OldItems)
item.PropertyChanged -= item_PropertyChanged;
}
if (e.NewItems != null)
{
foreach (INotifyPropertyChanged item in e.NewItems)
item.PropertyChanged += item_PropertyChanged;
}
}

static void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
throw new NotImplementedException();
}

关于c# - ObservableCollection 和 Item PropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/901921/

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