我已将 DataGrid 绑定到 TEntity 类型的 ObservableCollection。该集合包含实体框架实体。
当数据库中的此类实体发生更改时,应用程序会收到通知。如果这是一个简单的替换更改,我只需覆盖 ObservableCollection 中的实体。
但是,这不会触发 UI 刷新。我认为问题在于它仍然是我所指的同一个对象。该实体现在与 UI 显示的内容肯定不同(我在 DbContext 上重新加载),因为某些列已更改。
当我这样做时
collection[index] = changedObject;
什么都没发生。集合正确触发 CollectionChanged 事件,但 UI 不会更新任何内容。
然后我尝试了这个:
collection[index] = new TEntity(); // Create a dummy object
collection[index] = changedObject;
现在 UI 更新,但集合当然会触发 2 个 CollectionChanged 事件。
我想一种选择是为已更改实体的所有属性触发 PropertyChanged 事件,但这似乎有点矫枉过正(事件太多),到目前为止我不需要在我的 EF 类上实现该事件。
我的问题:如果行已更改但对象仍然相同(尽管对象内的属性已更改),我如何可靠地更新 WPF 绑定的 ObservableCollection?