繁体   English   中英

WPF DataGrid:以编程方式对列进行MVVM排序吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM