如何使用 ObservableCollection 从 ViewModel 刷新 UI
本文关键字:刷新 UI ViewModel 何使用 ObservableCollection | 更新日期: 2023-09-27 18:33:37
我有一个列表框,其中包含绑定到ObservableCollection的项目。
现在,从视图模型中,我需要对 UI 进行更新。我没有从我的视图模型中引用列表框。
如果我从可观察集合中删除或添加项目,UI 将更新。
根据其他一些逻辑,我需要更新 UI...但可观察集合是相同的。
如何在不添加或删除可观察集合的情况下更新 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();