c# - ObservableCollection 和 Item PropertyChanged

标签 c# observablecollection

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

相关文章:

c# - 事件目录是否防止不在域中的客户端进行修改?

c# - Mono C# 不识别列表和字典?

c# - 如何在同一应用程序的所有窗口之上显示一个窗口

c# - 在 c# 中删除 listBoxItem 时 ListBox 不刷新

silverlight - 更新 ObservableCollection 导致 "The Parameter is incorrect"异常

c# - 有效地将一系列值添加到 ObservableCollection

C# Exchange PowerShell pipeLine Invoke 正在为 null 参数值引发 CmdletInvocationException

WPF TwoWay 将一些元素绑定(bind)到 ObservableCollection

WPF:Xaml,在.NET 4.0中的xaml中创建一个可观察的集合<object>

c# - 通过 ASP.NET MVC 3 中的 BindAttribute 和 ModelValidator 排除的属性