代码之家  ›  专栏  ›  技术社区  ›  Phil Sandler

wpf绑定到idictionary<int,mytype>。值不响应属性更改?

  •  0
  • Phil Sandler  · 技术社区  · 14 年前

    我正在绑定一个ListView属性,该属性基本上将值集合(ICollection)包装在通用字典上。

    当字典中的值更改时,我调用onNotifyPropertyChanged(property)。我看不到屏幕上的更新,没有绑定错误。

    当我更改属性getter以返回linq扩展dictionary.values.tolist()时,如果不更改属性(icollection)的签名,它就不会有问题。

    值集合绑定并正确通知而不投影到IList的原因是什么?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Andy    14 年前

    打电话 OnNotifyPropertyChanged() 在本例中不完全正确,因为集合仍然相同,但是集合中的项已更改。我不知道wpf绑定代码是如何工作的,但它可能会快速检查它绑定到的引用是否已更改,如果没有,它将不会更新ui。

    原因是 ToList() 工作是因为每次调用它时 List<T> 所以当 onNotifyPropertyChanged() 被激发时,wpf将接收更改并更新其所有绑定。

    我不知道这是否可能,但理想的解决方案是将集合用于实现 INotifyCollectionChanged . 这将触发wpf监视的事件,以便可以根据需要从ui中添加、删除项等。