我有一个列表框,其中包含绑定到 ObservableCollection 的项目。
现在,在 viewModel 中,我需要更新 UI。我没有从我的视图模型中引用列表框。
如果我从我的 ObservableCollection 中删除或添加一个项目,则 ui 会更新。
基于其他一些逻辑,我需要更新 UI ......但 ObservableCollection 是相同的。
如何在不从我的 ObservableCollection 添加或删除项目的情况下更新 UI?
谢谢
我有一个类似的问题,我想更改项目的背景,但显然项目和集合都没有改变。
它是通过调用实现的:
CollectionViewSource.GetDefaultView(your_collection_name).Refresh();
这在不改变集合的情况下刷新了视图模型中的视图
如果您因为编辑了集合中的项目而需要更改 UI ,那么您应该安排这些项目来实现INotifyPropertyChanged
接口。如果您的集合中的对象有一个PropertyChanged
事件,那么 UI 将从各个项目中侦听该事件。(如果可能,您还可以将集合中的项目更改为DependencyObjects
with DependencyProperties
,这可以实现相同的目标。)
如果您确实需要在您的集合没有任何更改时触发 UI 更新,那么执行此操作的方法是手动引发CollectionChanged
事件。这不能按ObservableCollection<>
原样完成,但您可以从该类派生一个新集合,并protected OnCollectionChanged
从某个新方法中调用该public
方法。
这是扩展方法的一个很好的例子。它隐藏了实现,以防它在将来的版本中发生变化,可以在一个地方进行修改,并且调用代码看起来更简单且不那么混乱。
public static void Refresh<T>(this ObservableCollection<T> value)
{
CollectionViewSource.GetDefaultView(value).Refresh();
}
用法:
myCollection.Refresh();