2010-10-31 49 views
1

我有我的網頁上3個控制WPF半級聯列表框

  • 列表框一個
  • ListBox中乙
  • 組合框Ç

ListBox中A是數據綁定到的項目的

集合

組合框C是數據綁定到項目集合C

列表框B是數據綁定到項目集合B

B對項目A和項目C有引用,列表框B應該只顯示項目A是ListBox A的選定項目,項目C是選擇的項目列表框C

我已經弄亂了一點ListBox B上的ItemSource的collectionviews,設置一個過濾器,但我只能得到它來更新基於ListBox A或ComboBox C的ListBox B的內容,而不是在同一時間。

任何想法?

回答

2

在您的視圖模型,給CollectionView一個過濾謂詞,這樣的事情:

Items = CollectionViewSource.GetDefaultView(_Items) as CollectionView; 
Items.Filter = (x => ((Item)x).CategoryA == SelectedCategoryA 
       && ((Item)x).CategoryC == SelectedCategoryC); 

綁定列表/組合框SelectedItemSelectedCategoryASelectedCategoryC性能。在這些房產的籌碼人中,請致電Items.Refresh()

編輯

在你的列表框,都綁定和ItemsSourceSelectedItem,例如

<ListBox ItemsSource="{Binding CategoryListA}" 
     SelectedItem="{Binding SelectedCategoryA, Mode=TwoWay}"/> 

在您的視圖模型,創建這樣一個屬性:

private Category _SelectedCategoryA; 

public Category SelectedCategoryA 
{ 
    get { return _SelectedCategoryA; } 
    set 
    { 
     if (value != _SelectedCategoryA) 
     { 
     _SelectedCategoryA = value; 
     Items.Refresh(); 
     } 
    } 
} 
+0

你能如何將selectedItem屬性綁定和調用items.refresh詳細點嗎? – thmsn 2010-11-01 12:42:41

+0

當然;看我的編輯。 – 2010-11-01 15:13:54

0

一種解決方案是從類型b的公共訪問器屬性集合中創建項目B的單獨集合。喜歡這個。

private List<B> m_trueCollection; //the actual collection of B 
public ObservableCollection<B> FilteredB { get; set; } //bind to this 

然後,收聽到每當有使用SelectionChanged事件屬性組合框C或列表框A的所選項目的變化。

如果更改了選擇,請按照您的條件迭代真實集合並重建FilteredB。

希望它有幫助。