PropertyChangedCallback

PropertyChangedCallback

看起来WPF并不总是调用PropertyChangedCallback的已注册DependencyProperty过程。即使我们从VM手动引发PropertyChanged事件,WPF似乎在决定是否调用回调之前实际上会评估该属性的旧值和新值。所以我的问题是:


为什么会这样呢?
解决方法是什么?


细节

我的ViewModel具有一个公共属性,定义如下:

Public ReadOnly Property CurrentSelection() As ObservableCollection(Of Object)


我的视图像这样绑定到此属性(BetterPropertyGrid是一个用户控件,其中将WinForms PropertyGrid包装在其中,并具有名为DependencyPropertySelectedObjects):

<bd:BetterPropertyGrid SelectedObjects="{Binding CurrentSelection}" />


现在,每当我的ViewModel从CurrentSelection中添加或删除对象时,我都会手动升高PropertyChanged("CurrentSelection"),但是它似乎并没有更新我的View。

最佳答案

WPF检查属性值是否实际上与发出更改通知之前的值不同。在您的情况下,视图模型属性getter返回了相同的集合实例,因此更改无效。

“为什么这样?”:因为新旧属性值相等。在传递给PropertyChangedCallback的PropertyChangedEventArgs中,e.OldValuee.NewValue将引用相同的集合实例。

“解决方法是什么?”:注册INotifyCollectionChanged.CollectionChanged属性值的SelectedObjects事件的处理程序,如this answer中所示。

关于c# - 不调用PropertyChangedCallback,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31990339/

10-11 21:59