gpt4 book ai didi

c# - 未调用 PropertyChangedCallback

转载 作者:行者123 更新时间:2023-11-30 19:24:55 30 4
gpt4 key购买 nike

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

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

详情

我的 ViewModel 有一个公共(public)属性定义如下:

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

我的 View 像这样绑定(bind)到这个属性(BetterPropertyGrid 是一个 UserControl,它包装了一个 WinForms PropertyGrid,并且有一个名为 SelectedObjectsDependencyProperty ):

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

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

最佳答案

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

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

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

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com