gpt4 book ai didi

c# - WPF 数据网格 : sort a column programatically the MVVM way?

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:04 28 4
gpt4 key购买 nike

我有一个使用 WPF-Datagrid 的 WPF 应用程序。我可以单击列标题对列进行排序,这会自动进行。我想要的是在程序开始时以编程方式选择一个列,然后对其进行排序。或者换句话说:我想假装用户单击了列标题,但是以编程方式执行,MVVM 方式,省略了背后代码的更改。有什么解决办法吗?

最佳答案

我想这样做的“MVVM 方式”是将您的 DataGrid 绑定(bind)到代表您的对象集合的 CollectionView,并允许您通过 SortDescription 属性管理排序。

例如,在您的 View 模型中,您有一组对象:

private ObservableCollection<Entity> _entityCollection = null;
public ObservableCollection<Entity> EntityCollection
{
get
{
return _entityCollection;
}
set
{
_entityCollection = value;
RaisePropertyChanged("EntityCollection");
RaisePropertyChanged("CollectionView");
}
}

注意上面的 RaisePropertyChanged("CollectionView"):当您的集合发生变化时,应该通知 View 该 Collection View 也发生了变化。

因此,不是将数据网格直接绑定(bind)到集合,而是定义一个只读的 Collection View 属性,如下所示:

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;
}
}

然后绑定(bind)数据网格:

<DataGrid ItemsSource="{Binding Path=CollectionView}">

最后,如果您想更改集合排序所依据的属性,您应该清除 Collection View 的排序说明并添加一个新的,如下所示:

_collectionView.SortDescriptions.Clear();
_collectionView.SortDescriptions.Add(new SortDescription("NewPropertyName", ListSortDirection.Ascending));

关于c# - WPF 数据网格 : sort a column programatically the MVVM way?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37565443/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com