【发布时间】:2017-11-19 18:10:52
【问题描述】:
我有一个可观察的集合。
这个集合的类有几个字段,这些字段又可以有服务器值。
我希望我的用户能够搜索大量字段和值。
我已经使用 ICollection,但我看到的所有示例都是基于对 1 个字段的搜索。
这是我的课:
public class Tasks
{
private string JobPriority;
private string JobLabel;
private string JobType;
private string UserRef;
}
JobPriority can be 'High', 'Low'
JobLabel can be 'Apple', 'Android', 'Microsoft'
JobType can be 'Internal', 'Private', 'Public'
所以,我这样实例化我的集合:
public ObservableCollection<KanbanModelExtra> Tasks
{
get
{
if (_tasks == null)
{
TaskView = CollectionViewSource.GetDefaultView(_tasks);
TaskView.Filter = TaskFilter;
}
return _tasks;
}
set
{
_tasks = value;
}
}
public ICollectionView TaskView { get; private set; }
并将我的过滤器设置为:
private bool TaskFilter(
object item )
{
var task = item as KanbanModelExtra;
if ( task == null )
{
return false;
}
foreach ( var searchItem1 in JobPrioritiesToSearchOn )
{
if ( task.JobPriority == searchItem1 )
{
foreach ( var searchItem2 in JobLabelsToSearchOn )
{
if ( task.JobLabel == searchItem2)
{
foreach (var searchItem3 in JobTypesToSearchOn)
{
if (task.JobType == searchItem3)
{
if ( SearchByCurrentUser )
{
if ( task.UserRef == HeartBeat.CurrentUser.UserRef )
{
return true;
}
}
else
{
return true;
}
}
}
}
}
}
}
return false;
}
但这似乎“沉重”且丑陋。此外,每次更改都会刷新集合。在选择了所有标准之后,我会在哪里撒谎以刷新收藏。
有没有更好的办法?
【问题讨论】:
标签: c# wpf filter observablecollection icollection