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绑定系统通知已删除/移动/添加的项
有关更多详细信息,请参见此处:请参见