【问题标题】:List of items implementing INotifyPropertyChanged实现 INotifyPropertyChanged 的​​项目列表
【发布时间】:2012-08-13 08:13:56
【问题描述】:

实现项目集合的最佳方式是什么,其中:

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

更新:

我正在考虑这样的事情: 收藏:

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

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

Collection.Add("NewItem", value);

然后改变它:

Collection["NewItem"] = newValue;

哪个会触发事件:

NotifyPropertyChanged("NewItem");

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

谢谢。

【问题讨论】:

    标签: c# .net inotifypropertychanged


    【解决方案1】:

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

    我这么说的原因:

    • 通知集合内容已更改的正确接口是INotifyCollectionChanged,而不是INotifyPropertyChanged。当您添加项目或调用 Collection["NewItem"] = newValue 时,您应该触发的事件是 CollectionChanged,因为它不是列表的 属性 已更改 - 它是 内容
    • 您显然希望您的列表具有键/值对,这意味着您不能轻易使用现有的 ObservableCollection 类。

    另外,您说“我将能够订阅该集合中的每一个项目”,这表明您可能希望将字典中的“值”限制为 @987654328 @ 但是,我建议您将 ObservableDictionary 创建为泛型类,然后您可以选择将字典中的值设为您需要的任何类型。

    【讨论】:

      【解决方案2】:

      如果必须是列表,请使用

      ObservableCollection<INotifyPropertyChanged>
      

      【讨论】:

      • 根据要求这不起作用 - 问题是使用键控集合,例如 Dictionary
      • 哦,对了,OP 在我提交答案后更新了问题。
      猜你喜欢
      • 2020-02-25
      • 2010-10-04
      • 1970-01-01
      • 2012-02-11
      • 2014-07-30
      • 1970-01-01
      • 2010-12-28
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多