【问题标题】:multiple views of an observablecollection filtered by element data由元素数据过滤的 observablecollection 的多个视图
【发布时间】:2012-06-01 02:45:53
【问题描述】:

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

有没有办法让这两种方法都起作用?或者有更好的方法来做到这一点?

【问题讨论】:

    标签: wpf filter observablecollection


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多