我想这样做的“MVVM 方式”是将您的 DataGrid 绑定到代表您的对象集合的 CollectionView,并允许您通过 SortDescription 属性管理排序。
例如,在您的视图模型中,您有一个对象集合:
private ObservableCollection<Entity> _entityCollection = null;
public ObservableCollection<Entity> EntityCollection
{
get
{
return _entityCollection;
}
set
{
_entityCollection = value;
RaisePropertyChanged("EntityCollection");
RaisePropertyChanged("CollectionView");
}
}
注意上面的RaisePropertyChanged("CollectionView"):当你的集合发生变化时,应该通知视图集合视图也发生了变化。
因此,与其将数据网格直接绑定到集合,不如定义一个只读的 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;
}
}
然后你绑定你的数据网格:
<DataGrid ItemsSource="{Binding Path=CollectionView}">
最后,如果您想更改对集合进行排序的属性,您应该清除集合视图的 sortdescriptions 并添加一个新的,如下所示:
_collectionView.SortDescriptions.Clear();
_collectionView.SortDescriptions.Add(new SortDescription("NewPropertyName", ListSortDirection.Ascending));