在viewmodel或xaml代码隐藏中的wpf collectionviewsource

时间:2013-09-13 15:57:45

标签: c# wpf xaml mvvm collectionviewsource

我陷入了这种困境,希望有人可以帮助我

抱歉,我不能在此处粘贴代码作为公司块发布。

我正在尝试在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.aspxXAML Binding to a CollectionViewSource property on a ViewModel,但似乎没有人提到ui线程所有权问题。我在做一些非常愚蠢的事情

感谢

1 个答案:

答案 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