我陷入了这种困境,希望有人可以帮助我
抱歉,我不能在此处粘贴代码作为公司块发布。我正在尝试在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 Binding to a CollectionViewSource property on a ViewModel,但似乎没有人提到ui线程所有权问题。我在做一些非常愚蠢的事情
感谢
答案 0 :(得分:3)
如果您遇到线程问题,请使用Dispatcher
:
Application.Current.Dispatcher.Invoke(
new Action(() => /* modify the collection */));
或者使用EnableCollectionSynchronization
方法,这是WPF 4.5中的新方法,并将为您做同样的事情:
private static object syncObject = new object();
//...
BindingOperations.EnableCollectionSynchronization(yourCollection, syncObject);
详细了解here。