我剛剛在我的第一個MVVM項目中實現了一個ICollectionView
,並讓它工作。不過,我認爲實施可能更好,更流暢。我會發布與我的ICollectionView
有關的代碼,如果有人能夠給我提供任何關於如何簡化或改進它的提示或建議,請讓我知道。這裏是我的代碼:高效實現ICollectionView過濾
private ICollectionView _advFilter;
public ICollectionView AdventurerFilter
{
get { return _advFilter; }
set
{
if (_advFilter != value)
{
_advFilter = value;
RaisePropertyChanged(() => AdventurerFilter);
}
}
}
public MainViewModel()
{
AdvNoFilter();
}
public void LoadGameExecute()
{
//Serialization Logic
AdvNoFilter();
}
public void ShowAllExecute()
{
AdvNoFilter();
}
public void ShowEmployedExecute()
{
AdvFilter(AdvStatus.Employed);
}
public void ShowAvailableExecute()
{
AdvFilter(AdvStatus.Available);
}
void AdvFilter(AdvStatus status)
{
AdventurerFilter = CollectionViewSource.GetDefaultView(Adventurers);
AdventurerFilter.Filter = adv => ((Adventurer)adv).Status.Equals(status);
}
void AdvNoFilter()
{
AdventurerFilter = CollectionViewSource.GetDefaultView(Adventurers);
AdventurerFilter.Filter = null;
}
所有這一切都在我的MainViewModel
。 Show ... Execute命令綁定到我的MainView
中的按鈕,數據顯示在ListBox
中,該數據綁定到AdventurerFilter
。就像我以前悲傷一樣,它很有效,但我嚴重懷疑這不可能更有效率地完成。任何意見,將不勝感激!
編輯:我應該早些提到這個,但Adventurers
是ObservableCollection
。
爲什麼你不能使用內置列表中的一個? 'ObservableCollection <>'可以做你所需要的,或者你可以從這裏使用'SortableObservableCollection':http://sortablecollection.codeplex.com/ – jugg1es
'冒險家'是一個'ObservableCollection'。您發佈的鏈接根本不包括過濾。 –