【问题标题】:How DataGrid is notified when item in the collection is changed?更改集合中的项目时如何通知 DataGrid?
【发布时间】:2021-07-16 18:06:47
【问题描述】:

我有两个 DataGrids 绑定到我的 ViewModel 中的同一个 ObservableCollection 属性。 当我编辑一个 DataGrid 中的现有行时,另一行会在行提交后更新。

但它是如何工作的? NotifyCollectionChanged 事件不会在基础 ObservableCollection 上引发。我已经通过订阅活动进行了检查。

【问题讨论】:

    标签: wpf data-binding datagrid observablecollection


    【解决方案1】:

    在这种情况下,您正在修改集合的项目(实体)的属性,而不是集合本身。
    因此,不会引发 CollectionChanged 事件。
    要更新实体中的属性,必须在其中实现 INotifyPropertyChanged。
    但是,如果属性的更改仅通过绑定发生,那么即使这样也没有必要。
    绑定在其工作中使用 PropertyDescriptor 和其他类型的反射。
    这允许绑定“知道”一个属性已被另一个绑定更改。

    如果你说俄语,请阅读我的文章:https://www.cyberforum.ru/wpf-silverlight/thread2650880.html

    【讨论】:

    • 每本书都告诉我们,绑定是通过 INotifyPropertyChanged 进行的。我对有多少事情没有按照文档中描述的方式工作感到沮丧。
    • “通过 INotifyPropertyChanged 绑定工作”有点不同。正确地“使用 INotifyPropertyChanged 绑定”。这是绑定使用的机制之一,但不是唯一的。绑定的工作方式有很多复杂性。你会记得:对于属性的路径,他们只需要指定一个字符串值。因此,没有反射就不可能得到属性的值。
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2018-02-27
    相关资源
    最近更新 更多