【发布时间】:2010-05-18 14:55:42
【问题描述】:
我希望拥有“可观察”的字典,以便在其项目更改(删除或添加)时引发事件。
在其他类中,我创建了这样的字典并将绑定设置为ListBox.ItemsSourseProperty。
绑定工作得很好。我可以看到这些项目。
但有些问题:事件PropertyChanged 始终为空。
谁能帮忙?
提前致谢!
class ObservableDictionary<TKey, TValue> :
Dictionary<TKey, TValue>,
INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public new void Remove(TKey obj)
{
base.Remove(obj);
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Remove"));
}
}
}
【问题讨论】:
-
在使用 new 关键字时要小心...因为该方法只会在对象被限定并强制转换为 ObservableDictionary 时调用。由于大多数框架 bindind 模型会将其转换为 IEnumerable,因此 Add & Remove 仍将调用基础 Dictionary 上的下游实现。相反,我会将您的类编写为具有内部 Dictionary 用于存储的包装类,然后实现 IDictionary 和 INotifyCollectionChanged 接口和相应的方法。
-
public class Foo { public void Bar() { Console.WriteLine("Test 1"); } } 公共类 Foo2 : Foo { public new void Bar() { Console.WriteLine("Test 2"); } } var f = new Foo2(); f.Bar(); ((Foo)f).Bar();返回测试 2 测试 1
标签: c#