看起来WPF并不总是调用PropertyChangedCallback
的已注册DependencyProperty
过程。即使我们从VM手动引发PropertyChanged
事件,WPF似乎在决定是否调用回调之前实际上会评估该属性的旧值和新值。所以我的问题是:
为什么会这样呢?
解决方法是什么?
细节
我的ViewModel具有一个公共属性,定义如下:
Public ReadOnly Property CurrentSelection() As ObservableCollection(Of Object)
我的视图像这样绑定到此属性(BetterPropertyGrid是一个用户控件,其中将WinForms
PropertyGrid
包装在其中,并具有名为DependencyProperty
的SelectedObjects
):<bd:BetterPropertyGrid SelectedObjects="{Binding CurrentSelection}" />
现在,每当我的ViewModel从CurrentSelection中添加或删除对象时,我都会手动升高
PropertyChanged("CurrentSelection")
,但是它似乎并没有更新我的View。 最佳答案
WPF检查属性值是否实际上与发出更改通知之前的值不同。在您的情况下,视图模型属性getter返回了相同的集合实例,因此更改无效。
“为什么这样?”:因为新旧属性值相等。在传递给PropertyChangedCallback的PropertyChangedEventArgs
中,e.OldValue
和e.NewValue
将引用相同的集合实例。
“解决方法是什么?”:注册INotifyCollectionChanged.CollectionChanged
属性值的SelectedObjects
事件的处理程序,如this answer中所示。
关于c# - 不调用PropertyChangedCallback,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31990339/