将ObservableCollection绑定为不同CollectionViewSource的源

时间:2013-03-27 16:22:00

标签: c# wpf binding observablecollection collectionviewsource

我有一个名为ObservableCollection<MyClass>的{​​{1}},应绑定到两个myCollection s CollectionViewSourceAllItems

SelectedItems的源属性绑定到AllItemsmyCollection的源属性应绑定到SelectedItems的{​​{1}}项。

myCollection

问题:加载Window时,一切正常。但是,当IsSelected == true中某些项目的public class MyClass : INotifyPropertyChanged { //fields and interface implementations public string Name {//proper code}; public bool? IsSelected {//proper code}; } // some where else in the MainWindow AllItems.Source = myCollection; SelectedItems.Source = myCollection.Where(input=>input.IsSelected==true); 值发生变化时,它显然对IsSelected没有影响。因此,为了解决这个问题,我每次更改myCollection属性时都会更新SelectedItems的源属性。

问题:如何进行这类绑定,以便无需手动更新SelectedItems的源属性?

Thnaks。

2 个答案:

答案 0 :(得分:1)

MyClass中的更改后,您应该提出PropertyChanged Event

如果您已经这样做,那么您应该在调试模式下查看SelectedItems.Source。也许它已经存在正确的值,但它没有显示给你。

我的意思是如果SelectedItems.Source属于某些可见元素 - GUI - 您应该在屏幕上刷新它。导致该值存在另一种方式,但直到屏幕上的元素重新绘制才会显示。

答案 1 :(得分:1)

首先,您应该无条件地删除手动过滤设置,并将其替换为更合适的设置。替换内容的选择主要取决于您所针对的.NET版本。

如果定位.NET 4.5,那么一个简单的解决方案就是在集合视图上启用live filtering

对于早期版本的.NET,无论如何都必须进行一些手动工作,但最好只在重新绑定控件的集合视图上调用Refresh。为此,您应该通过从XAML设置Filter事件处理程序将过滤推迟到集合视图本身。