我绑定了一个ListView属性,基本上包装值集合(ICollection)在通用字典上。WPF绑定到IDictionary <int,MyType>。值不响应属性更改?
当字典中的值发生变化时,我调用OnNotifyPropertyChanged(property)。我没有看到屏幕上的更新,没有绑定错误。
当我改变属性getter返回Linq扩展dictionary.Values.ToList(),而不改变属性的签名(ICollection)它没有问题。
为什么Values集合绑定并正确通知而没有投影到IList <>?
有趣的,虽然我认为这就是所谓的PropertyChanged完成。在大多数情况下(并且在大多数例子中),这被放置在设置器中,并且仅在值/参考改变时才被调用。这实际上正是我认为我的方法可行的原因 - 我认为PropertyChanged调用导致了更新,而不是值/参考的更改。 – 2010-04-21 19:12:34
有一些实现INotifyCollectionChanged的字典的例子。尝试搜索ObservableDicitonary。 – 2010-04-21 19:23:15
@Phil @Andy是正确的,因为WPF绑定系统将引用作为优化来检查。如果引用不改变,它不会更新绑定。这就是INotifyCollectionChanged接口存在的原因。 – 2010-04-21 19:25:06