Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF与IDictionary的绑定<;int,MyType>;。值不';你对房地产变化没有反应吗?_Wpf_Data Binding - Fatal编程技术网

WPF与IDictionary的绑定<;int,MyType>;。值不';你对房地产变化没有反应吗?

WPF与IDictionary的绑定<;int,MyType>;。值不';你对房地产变化没有反应吗?,wpf,data-binding,Wpf,Data Binding,我将ListView绑定到一个属性,该属性本质上将值集合(ICollection)包装到一个通用字典上 当字典中的值更改时,我调用NotifyPropertyChanged(property)。我在屏幕上看不到更新,没有绑定错误 当我更改属性getter以返回Linq扩展dictionary.Values.ToList()时,在不更改属性签名(ICollection)的情况下,它可以正常工作 值集合在不投影到IList的情况下正确绑定和通知的任何原因?在这种情况下调用OnNotifyProper

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

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

当我更改属性getter以返回Linq扩展dictionary.Values.ToList()时,在不更改属性签名(ICollection)的情况下,它可以正常工作


值集合在不投影到IList的情况下正确绑定和通知的任何原因?

在这种情况下调用
OnNotifyPropertyChanged()
并不完全正确,因为集合仍然相同,但集合中的项已更改。我不知道WPF绑定代码是如何工作的,但它可能会快速检查它绑定到的引用是否已更改,如果未更改,则不会更新UI

ToList()
工作的原因是,每次调用它时,都会返回一个新的
List
实例,因此当触发
OnNotifyPropertyChanged()
时,WPF会接收更改并更新其所有绑定


我不知道这是否可行,但理想的解决方案是为实现的绑定使用集合。这将触发WPF监视的事件,以便可以在适当的情况下从UI中添加、删除项等。

很有趣,尽管我认为调用PropertyChanged就是这样完成的。在大多数情况下(以及在大多数示例中),这是放在setter中的,并且仅当值/引用发生更改时才调用。事实上,这正是我认为我的方法可行的原因——我认为是PropertyChanged调用导致了更新,而不是值/引用的更改。尝试搜索ObservableDictionary。@Phil@Andy是正确的,因为WPF绑定系统将检查引用作为优化。如果引用未更改,则不会更新绑定。这就是为什么INotifyCollectionChanged接口存在的原因。再一次,很有趣,很高兴知道。因此,我在setter中使用的代码(在许多示例中都可以看到)如“if(_myVar==value)return;”仅对值类型是必需的?我想我现在还是用ToList()吧,因为我在为类似的屏幕修补的ObservableDictionary上遇到了各种各样的问题。谢谢你的评论。