【发布时间】:2013-06-01 19:39:27
【问题描述】:
我刚刚在我的第一个 MVVM 项目中实现了一个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 中的按钮,数据显示在绑定到AdventurerFilter 的ListBox 中。就像我之前伤心的那样,它有效,但我严重怀疑这不能更有效地完成。任何建议将不胜感激!
编辑:我应该早点提到这一点,但 Adventurers 是 ObservableCollection。
【问题讨论】:
-
为什么你不能使用内置列表之一?
ObservableCollection<>可以做你需要的,或者你可以从这里使用SortableObservableCollection:sortablecollection.codeplex.com -
Adventurers是一个ObservableCollection。您发布的链接根本不包括过滤。
标签: c# mvvm filtering icollectionview