我正在构建一个 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;
有没有办法使这些方法中的任何一种都起作用?或者更好的方法来做到这一点?