1

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

  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");

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

谢谢。

4

2 回答 2

2

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

我这么说的原因:

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

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

于 2012-08-13T08:30:31.097 回答
0

如果它必须是一个列表,请使用

ObservableCollection<INotifyPropertyChanged>
于 2012-08-13T08:16:33.590 回答