PropertyChangedCallback未调用

时间:2015-08-13 13:59:30

标签: c# wpf dependency-properties inotifypropertychanged

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

  1. 为什么会这样?
  2. 解决方法是什么?
  3. 详细

    我的ViewModel的公共属性定义如下:

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

    我的视图绑定到此属性(BetterPropertyGrid是一个UserControl,它包含一个WinForms PropertyGrid并且DependencyProperty名为SelectedObjects}:

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

    现在,只要我的ViewModel在CurrentSelection中添加或删除对象,我就会手动引发PropertyChanged("CurrentSelection"),但它似乎不会更新我的View。

1 个答案:

答案 0 :(得分:9)

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

&#34;为什么会这样?&#34;:因为旧的和新的财产价值相等。在PropertyChangedEventArgs传递给您的PropertyChangedCallback e.OldValuee.NewValue将引用相同的集合实例。

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