如何使用 ObservableCollection 从 ViewModel 刷新 UI

本文关键字:刷新 UI ViewModel 何使用 ObservableCollection | 更新日期: 2023-09-27 18:33:37

我有一个列表框,其中包含绑定到ObservableCollection的项目。

现在,从视图模型中,我需要对 UI 进行更新。我没有从我的视图模型中引用列表框。

如果我从可观察集合中删除或添加项目,UI 将更新。

根据其他一些逻辑,我需要更新 UI...但可观察集合是相同的。

如何在不添加或删除可观察集合的情况下更新 UI?

谢谢

如何使用 ObservableCollection 从 ViewModel 刷新 UI

如果由于编辑了集合中的项而需要更改 UI,则应安排这些项来实现INotifyPropertyChanged接口。如果集合中的对象具有PropertyChanged事件,则 UI 将从各个项侦听该事件。(如果可能,您还可以将集合中的项目更改为使用 DependencyProperties DependencyObjects,这将实现相同的目标。

如果确实需要在集合没有任何更改时触发 UI 更新,则执行此操作的方法是手动引发CollectionChanged事件。这不能按原样对ObservableCollection<>完成,但您可以从该类派生一个新集合,并从某个新的public方法中调用 protected OnCollectionChanged 方法。

我遇到了类似的问题,我想更改项目的背景,但显然该项目和集合都没有更改。

它是通过调用以下方法实现的:

CollectionViewSource.GetDefaultView(your_collection_name).Refresh();

这刷新了视图模型中的视图,而无需更改集合

这是扩展方法的一个很好的例子。它隐藏了实现,以防它在将来的版本中发生变化,可以在一个地方修改,并且调用代码看起来更简单,更少混乱。

public static void Refresh<T>(this ObservableCollection<T> value)
{
    CollectionViewSource.GetDefaultView(value).Refresh();
}

用法:

myCollection.Refresh();