wpf collectionviewsource in viewmodel or xaml code-behind

本文关键字:xaml code-behind or viewmodel collectionviewsource in wpf | 更新日期: 2023-09-27 18:31:23

我陷入了两难境地,希望有人能帮助我

抱歉,我无法在此处粘贴代码作为公司阻止发布。

我正在尝试在 XAML 中使用 CollectionViewSource。 我尝试了两种方法,静态资源和cvs.source。 第一个效果很好,但限制是我只能从代码隐藏中找到资源。 但是控制 UI 和 disaplay UI 不在同一视图上,我不知道如何触发排序/过滤所以我转到第二个选项,我将 CVS 放在视图模型中,属性公开给两个 UI。但是我遇到了这个著名的错误"尝试更改此线程不拥有的UI"

所以一般来说,在哪里放置CSV的好做法是什么。 我检查了许多地方,建议第二个选项 http://www.xamlplayground.org/post/2009/07/18/Use-CollectionViewSource-effectively-in-MVVM-applications.aspx 和 XAML 绑定到 ViewModel 上的 CollectionViewSource 属性,但似乎没有人提到 UI 线程所有权问题。 我真的在做什么愚蠢的事情吗

谢谢

wpf collectionviewsource in viewmodel or xaml code-behind

如果线程问题不断,请使用Dispatcher

Application.Current.Dispatcher.Invoke(
  new Action(() => /* modify the collection */));

或者使用EnableCollectionSynchronization方法,这是 WPF 4.5 中的新功能,将为您执行相同的操作:

private static object syncObject = new object();
//...
BindingOperations.EnableCollectionSynchronization(yourCollection, syncObject);

在此处阅读更多相关信息。