Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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 列表<&燃气轮机;集合不更新MVVM中的视图_Wpf_Mvvm - Fatal编程技术网

Wpf 列表<&燃气轮机;集合不更新MVVM中的视图

Wpf 列表<&燃气轮机;集合不更新MVVM中的视图,wpf,mvvm,Wpf,Mvvm,我使用列表集合作为DataGrid控件的ItemsSource 但是如果我从列表集合中删除该项,它不会更新视图。我为解决这个问题挣扎了很长时间 然后,取代我的ViewModel中的列表集合。我将其更改为可观察收集集。现在,当集合中发生更改时,它会更新视图 我不知道为什么它只为observetecollection更新?有人吗?好吧,这是名义上的。简单列表不会告诉ui更新,换句话说,“视图无法观察列表”。数据绑定背后没有什么奇怪的魔力。WPF和数据绑定需要数据模型告诉他们“这是新的”或“这是更改的

我使用
列表集合
作为DataGrid控件的ItemsSource

但是如果我从列表集合中删除该项,它不会更新视图。我为解决这个问题挣扎了很长时间

然后,取代我的ViewModel中的
列表
集合。我将其更改为
可观察收集集
。现在,当集合中发生更改时,它会更新视图


我不知道为什么它只为
observetecollection
更新?有人吗?

好吧,这是名义上的。简单列表不会告诉ui更新,换句话说,“视图无法观察列表”。数据绑定背后没有什么奇怪的魔力。WPF和数据绑定需要数据模型告诉他们“这是新的”或“这是更改的”,您可能已经看到,这是相同的,但是对于集合,
列表没有实现它,而是执行它。

每次更改集合中的项时都会触发更改事件<代码>列表
没有。这就是原因

数据绑定是懒惰的。如果你不告诉你的观点,有些东西已经改变了,它就不需要更新了。在防护罩下,WPF数据绑定注册更改通知,以便您的ViewModel可以在视图发生更改时告知视图。它通过
INotifyPropertyChanged
INotifyCollectionChanged
等接口实现这一点


ObservableCollection
实现该接口。此接口定义事件,视图基本上将自己的事件处理程序附加到该事件。当集合引发事件时,该处理程序将更新视图。

因为列表没有实现

因为数据绑定的更新不是一种魔术,所以有几个要求可以使数据绑定正常工作。如果要绑定单个属性,则此属性必须是依赖项属性或其父类必须实现INotifyPropertyChanged接口,以通知wpf绑定系统有关属性值的更改。 对于集合,有一个simelar机制:它必须实现INotifyPropertyChanged,以便向wpf绑定系统通知已删除/移动/添加的项

有关更多详细信息,请参见此处:

请参见