0

データの行を取り込み、行に含まれるデータに基づいて GUI の別のタブに出力する WPF アプリケーションを構築しています。ただし、タブは実行時までわからないため、メインの 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;
}

また、ラムダ式と 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 に答える