我已经看到很多关于这个问题的讨论,但也许我只是一个新手,无法理解它。如果我有一个可观察的集合,它是 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/