Я почти уверен, что вы ищете CollectionViewSource . Bea предоставляет некоторую информацию о том, как использовать ее в ссылке.
С позиции MVVM так я использую ICollectionView
в моей ViewModel. Свойство _scriptService.Scripts
- это ObservableCollection<T>
, заключенное в ICollectionView
, которое возвращается в представление. _view.Filter
используется для фильтрации элементов в ICollection, тем самым изменяя представление. Аналогично вводу 'acc' и отображению всех элементов, которые начинаются с 'acc' в вашем списке.
public class ScriptRepositoryViewModel : AViewModel
{
private readonly IUnityContainer _container;
private readonly IScriptService _scriptService;
private readonly IEventAggregator _eventAggregator;
private ICollectionView _view;
public ScriptRepositoryViewModel(IUnityContainer container, IScriptService scriptService, IEventAggregator eventAggregator)
{
_container = container;
_scriptService = scriptService;
_eventAggregator = eventAggregator;
}
public ICollectionView Scripts
{
get
{
if (_view == null)
{
_view = CollectionViewSource.GetDefaultView(_scriptService.Scripts);
_view.Filter = Filter;
}
return _view;
}
}
}
Ниже приведен код, который заботится о фильтрации и входит через DelegateCommand
в Prism, он находится в той же модели представления.
#region SearchCommand
public DelegateCommand<object> SearchCommand { get; private set; }
private String _search = String.Empty;
private void Search(object commandArg)
{
_search = commandArg as String;
_view.Refresh();
}
public bool Filter(object arg)
{
bool usingPrefix;
IScript script = arg as IScript;
if (script.FileType == ConvertPrefixToFileType(_search, out usingPrefix))
{
if (_search.Length == 2)
return true;
else
return CheckProperties(script, usingPrefix);
}
else
{
if (usingPrefix)
return false;
else
return CheckProperties(script, usingPrefix);
}
}
Имея базовую функциональность и используя ICollectionView
, вы можете применить свою сортировку следующим образом ...
_view.SortDescriptions.Add(new SortDescription("PropertyName", direction));
Более подробную информацию о порядке сортировки можно найти здесь , так как есть некоторые соображения по поводу производительности, которые нужно учитывать.