实现INotifyPropertyChanged的项目列表

时间:2012-08-13 08:13:57

标签: c# .net inotifypropertychanged

实现项目集合的最佳方式是:

  1. 每个项目可以是不同类型的
  2. 每个项目都会在其更改时引发PropertyChanged事件(父类实现INotifyPropertyChanged)
  3. 更新

    我正在考虑这样的事情: 系列:

    ["Name", string:"John Doe"]
    ["Age", int:"32"]
    ["Profiles", List<Profiles>:"list of profiles"]
    

    我将能够添加这样的新项目:

    Collection.Add("NewItem", value);
    

    然后改变它:

    Collection["NewItem"] = newValue;
    

    将触发事件:

    NotifyPropertyChanged("NewItem");
    

    因此,我将能够订阅该集合中的每一项,并拥有不同的事件处理程序。

    感谢。

2 个答案:

答案 0 :(得分:1)

您的描述所需要的是我(和其他人)称之为ObservableDictionary的内容,Google会为您提供一些实施建议。 .NET中没有内置这样的类,但是有很多tuturials和第三方实现。

我这样说的原因:

  • 用于通知集合内容已更改的正确界面为INotifyCollectionChanged,而非INotifyPropertyChanged。当您添加项目或致电Collection["NewItem"] = newValue时,您应该触发的事件是CollectionChanged,因为它不是已更改的列表的属性 - 它是内容
  • 您显然希望列表中包含键/值对,这意味着您无法轻松使用现有的ObservableCollection类。

另外,您说“我将能够订阅该集合中的每个单独项目”,这表明您可能希望将字典中的“值”限制为{{ 1}}但是,我建议你应该创建INotifyPropertyChanged作为泛型类,然后你可以选择让字典中的值成为你需要的任何类型。

答案 1 :(得分:0)

如果必须是列表,请使用

ObservableCollection<INotifyPropertyChanged>