0

我正在构建一个 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;

有没有办法使这些方法中的任何一种都起作用?或者更好的方法来做到这一点?

4

1 回答 1

0

原来我只需要为谓词使用局部变量

var b = currTab
c.Filter = (foo) =>{return foo.ToString() == b;}; 
于 2012-05-25T16:57:48.200 回答