[英]WPF datagrid: sort a column programatically the MVVM way?
我有一个使用WPF-Datagrid的WPF应用程序。 我可以单击列标题来对列进行排序,这将自动起作用。 我想要的是在程序开始时以编程方式选择一列,然后对其进行排序。 或换一种说法:我想假装用户单击了列标题,但是以MVVM的方式以编程方式进行操作,因此省略了后面的代码中的更改。 有什么解决办法吗?
我想这样做的“ 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也已更改。
因此,您可以像下面这样定义只读的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}">
最后,如果您想更改对集合进行排序的属性,则应清除collectionview的sortdescriptions并添加一个新的象这样的内容:
_collectionView.SortDescriptions.Clear();
_collectionView.SortDescriptions.Add(new SortDescription("NewPropertyName", ListSortDirection.Ascending));
您可以通过使用Linq查询(如果有列表)以及使用DataTables来实现,则可以使用MyRows = myTable.Select(strExpr,strSort);
首先,您必须选择要进行排序的列,然后在viewmodel上可以使用LINQ或myTable.Select(strExpr,strSort)
范例程式码
switch(columnname)
{
case "name":
break;
case "FatherName"
break;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.