0

我处于困境中,希望有人可以帮助我

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

我正在尝试在 xaml 中使用 collectionviewsource。我尝试了两种方法,静态资源和 cvs.source。第一个效果很好,但限制是我只能从代码隐藏中找到资源。但是控制 ui 和显示 ui 不在同一个视图上,我不知道如何触发排序/过滤器,所以我转向第二个选项,我将 cvs 放在视图模型中,同时将属性暴露给两个 ui。但我得到了这个著名的错误“试图改变不属于这个线程的用户界面”

所以一般来说把csv放在哪里的好习惯是什么。我检查了很多地方建议第二个选项http://www.xamlplayground.org/post/2009/07/18/Use-CollectionViewSource-effectively-in-MVVM-applications.aspxXAML 绑定到 ViewModel 上的 CollectionViewSource 属性,但似乎没有人提到 ui 线程所有权问题。我在做一些非常愚蠢的事情吗

谢谢

4

1 回答 1

3

如果您一直遇到线程问题,请使用Dispatcher

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

或者使用EnableCollectionSynchronizationWPF 4.5 中新增的方法,它会为您做同样的事情:

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

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

于 2013-09-13T16:08:04.610 回答