我想这样做的"MVVM方式"是将DataGrid绑定到CollectionView表示对象集合的数据,并允许您通过SortDescription属性管理排序.
例如,在viewmodel中,您有一组对象:
private ObservableCollection<Entity> _entityCollection = null;
public ObservableCollection<Entity> EntityCollection
{
get
{
return _entityCollection;
}
set
{
_entityCollection = value;
RaisePropertyChanged("EntityCollection");
RaisePropertyChanged("CollectionView");
}
}
Run Code Online (Sandbox Code Playgroud)
请注意RaisePropertyChanged("CollectionView")以上内容:当您的集合发生更改时,应通知视图集合视图也已更改.
因此,不是将datagrid直接绑定到集合,而是定义一个只读的collectionview属性,如下所示:
private CollectionView _collectionView = null;
public CollectionView CollectionView
{
get
{
_collectionView = (CollectionView)CollectionViewSource.GetDefaultView(EntityCollection);
if (_collectionView != null)
_collectionView.SortDescriptions.Add(new SortDescription("PropertyName", ListSortDirection.Ascending));
return _collectionView;
}
}
Run Code Online (Sandbox Code Playgroud)
然后绑定datagrid:
<DataGrid ItemsSource="{Binding Path=CollectionView}">
Run Code Online (Sandbox Code Playgroud)
最后,如果要更改集合排序的属性,则应清除collectionview的sortdescriptions并添加如下所示的新属性:
_collectionView.SortDescriptions.Clear();
_collectionView.SortDescriptions.Add(new SortDescription("NewPropertyName", ListSortDirection.Ascending));
Run Code Online (Sandbox Code Playgroud)