由元素数据过滤的observablecollection的多个视图

时间:2012-05-25 14:01:33

标签: wpf filter observablecollection

我正在构建一个接收数据行的WPF应用程序,并根据行中包含的数据将它们输出到GUI中的不同选项卡中。但是,选项卡直到运行时才会知道,因此我需要动态构建一个未知数量的选项卡,其中包含不同过滤器的集合视图,而不是主ObservableCollection。

我一直在运行的问题是使用ListCollectionViews我需要一个谓词过滤器,但我不知道有一种基于局部变量的动态谓词的方法?我尝试了变量捕获,但每次添加新标签时,这只会更改我的所有过滤器。

//class variables
string currTab;
public ObservableCollection<MyData> myCollection = new ObservableCollection<myData>();
private void DataAdd(object sender, RoutedEventArgs e)
{
   currTab = inputData.ToString();
   ListCollectionView c = new ListCollectionView(myCollection);
   c.Filter = new Predicate<object>(MyFilter);
}
public bool MyFilter(object foo)
{
   if (foo).ToString() != currTab)
      return false;
   else
      return true;
}

我也尝试使用lambda表达式和ICollectionView,但是集合不会使用新值更新,所以我只看到空标签。

CollectionView c = new CollectionViewSource { Source = myCollection.Where(z => z.ToString() == tabName) }.View;

有没有办法让这些方法中的任何一种都有效?或者更好的方法呢?

1 个答案:

答案 0 :(得分:0)

事实证明我只需要为谓词使用局部变量

var b = currTab
c.Filter = (foo) =>{return foo.ToString() == b;};