Ich bin mir ziemlich sicher, dass Sie nach dem CollectionViewSource suchen. Bea gibt einige Informationen darüber, wie man es in der Verbindung verwenden kann.
Von einer MVVM-Haltung aus verwende ich die ICollectionView
in meinem ViewModel. Die _scriptService.Scripts
Eigenschaft ist eine ObservableCollection<T>
, die in einem ICollectionView
eingewickelt wird, das zu der Ansicht zurückgegeben wird. Die _view.Filter
wird verwendet, um Elemente innerhalb der ICollection herauszufiltern, wodurch die Ansicht geändert wird. Ähnlich wie "acc" eingeben und alle Einträge sehen, die in Ihrer Liste mit "acc" beginnen.
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;
}
}
}
Unten ist der Code, der Pflege der Filterung erfolgt, und über eine innerhalb DelegateCommand
Prism kommt, dies in der gleichen Ansichtsmodell befindet.
#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);
}
}
Mit der Basisfunktionalität an Ort und Stelle und die Nutzung der ICollectionView
Sie Ihre Sortierung anwenden können wie folgt ....
_view.SortDescriptions.Add(new SortDescription("PropertyName", direction));
Weitere Informationen über das Sortierverhalten kann here gefunden werden, da sind einige Performance-Gedanken zu beachten.
könnte dies nützlich sein: http://stackoverflow.com/questions/2041765/prism-for-silverlight-how-to-maintian-views-in-specific-order-inside-a-region –