2012-03-25 27 views
0

我有3個列表視圖。 itemsources綁定到一個ObservableCollection,person類有一個整型屬性(帶有INotifyPropertyChanged)「teamID」。現在,我想根據他們所在的團隊來過濾列表視圖,是否有一種方法可以輕鬆實現(我知道有兩種解決方案,但我認爲它們不好,1是製作3個ObservableCollection,但這會很複雜跟蹤並將所有人員轉移到正確的ObservableCollection,或者使用可見性等可見性觸發器,如果​​teamID是正確的teamID ^^ 我有3個按鈕,如果我在任何列表視圖上選擇一個項目(人員)取決於點擊該人員teamID將會改變的按鈕。 (但我也希望他根據teamID更改爲正確的列表視圖)同一條商品的源數據顯示不同的過濾器

希望你明白,否則請隨時索取更多詳細信息。

回答

2

,我認爲這是不可能做到這一點,而無需編寫一些代碼。

我會使用CollectionView而不是將集合直接綁定到ListView。這就是WPF在內部所做的事情,但是通過自己創建它們將可以控制很多事情,比如排序,當然還有過濾器。

使用CollectionViewSource.GetDefaultView(yourCollection)創建它們。

當團隊標識更改時,應用過濾器並在團隊ID屬性的設置器上執行CollectionView.Refresh()。如果你沒有太多的數據,這不是一個大問題。但在很多數據上Refresh()對三個視圖可能有點沉重。

編輯:

我忘了告訴你,你必須設置你的列表視圖,以對應的CollectionView的每一個源,但我認爲這是顯而易見的。

+0

Oke稍後會介紹如何使用1個CollectionView使用不同的視圖並將它們綁定到不同的列表視圖。 – Maximc 2012-03-26 12:00:58

0

綁定到一個公共屬性

public List<person> SrtedPerson1 { get { return ListView.DataSource = OriginalList.Where(x => x.TeamId==filteringTeamId).ToList(); }} 

有按鈕調用NotifyPropertyChanged( 「SrtedPerson1」);

這本身不會給你動態更新ListView.DataSource = OriginalList.Where(x => x.TeamId == filteringTeamId),因爲它只返回iEnumerable。

在公共我返回列表,如果你只是回到了IEnumerable它會與列表反正包裹得到了控制

+0

我不知道我不太擅長這個,但是應該使用observableCollections代替,所以我不必調用NotifyPropertyChanged? – Maximc 2012-03-25 21:31:49

+0

這樣做的工作,但我不喜歡,我不得不調用按鈕事件的NotifyPropertyChanged,它變得凌亂的IMO,我更希望用CollectionViewSource或什麼的答案,但如果沒有更好的答案,我會讓你讓你的答案是正確的。但後來我會重寫我的問題(因爲它更先進,它不使用按鈕,但拖放,所以很難跟蹤在哪裏使用raisepropertychange事件) – Maximc 2012-03-25 22:25:33

+0

如果將有一個按鈕和一個按鈕事件,然後NotifyPropertyChanged只是一行代碼。 OriginalList.Where(x => x.TeamId == filteringTeamId)的輸出不是ObservableCollection。你說你想要一個按鈕來完成這個改變。 ColletionViewsSource更多地用於靜態過濾器。 – Paparazzi 2012-03-26 00:38:10

相關問題