2012-05-25 38 views
0

我建立一個WPF應用程序,取入數據的行,並且將它們輸出到基於包含該行中的數據的GUI不同的標籤過濾一個ObservableCollection的多個視圖。然而,這些標籤直到運行時才知道,所以我需要動態構建未知數量的帶有集合視圖的選項卡,並使用不同的過濾器關閉主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

原來我只需要使用局部變量的謂詞

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