我正在构建一个接收数据行的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;
有没有办法让这些方法中的任何一种都有效?或者更好的方法呢?
答案 0 :(得分:0)
事实证明我只需要为谓词使用局部变量
var b = currTab
c.Filter = (foo) =>{return foo.ToString() == b;};