C# WPF datagrid:以MVVM方式编程对列进行排序?

C# WPF datagrid:以MVVM方式编程对列进行排序?,c#,wpf,sorting,mvvm,datagrid,C#,Wpf,Sorting,Mvvm,Datagrid,我有一个使用WPF数据网格的WPF应用程序。我可以单击列标题对列进行排序,这会自动工作。我想要的是在程序开始时以编程方式选择一列,然后对其进行排序。或者换一种方式说:我想假装用户单击了列标题,但以编程方式执行,即MVVM方式,忽略了后面代码中的更改。有什么解决方案吗?如果您有列表,可以使用Linq查询,如果您使用的是DataTables,则可以使用MyRows=myTable。选择(strExpr,strSort) 首先必须选择要排序的列,然后在viewmodel中可以使用LINQ或MyTabl

我有一个使用WPF数据网格的WPF应用程序。我可以单击列标题对列进行排序,这会自动工作。我想要的是在程序开始时以编程方式选择一列,然后对其进行排序。或者换一种方式说:我想假装用户单击了列标题,但以编程方式执行,即MVVM方式,忽略了后面代码中的更改。有什么解决方案吗?

如果您有列表,可以使用Linq查询,如果您使用的是DataTables,则可以使用MyRows=myTable。选择(strExpr,strSort)

首先必须选择要排序的列,然后在viewmodel中可以使用LINQ或MyTable.select(strExpr、strSort)

示例代码

 switch(columnname)
    {
    case "name":
    break;

    case "FatherName"
    break;
    }

如果您有列表,可以使用Linq查询,如果您使用的是DataTables,则可以使用MyRows=myTable.Select(strExpr,strSort)

首先必须选择要排序的列,然后在viewmodel中可以使用LINQ或MyTable.select(strExpr、strSort)

示例代码

 switch(columnname)
    {
    case "name":
    break;

    case "FatherName"
    break;
    }
我想“MVVM方式”是将您的DataGrid绑定到表示对象集合的
CollectionView
,并允许您通过
SortDescription
属性管理排序

例如,在viewmodel中有一组对象:

private ObservableCollection<Entity> _entityCollection = null;
public ObservableCollection<Entity> EntityCollection
{
    get
    {
        return _entityCollection;
    }
    set
    {
        _entityCollection = value;
        RaisePropertyChanged("EntityCollection");
        RaisePropertyChanged("CollectionView");
    }
}
然后绑定数据网格:

<DataGrid ItemsSource="{Binding Path=CollectionView}">
我想“MVVM方式”是将您的DataGrid绑定到表示对象集合的
CollectionView
,并允许您通过
SortDescription
属性管理排序

例如,在viewmodel中有一组对象:

private ObservableCollection<Entity> _entityCollection = null;
public ObservableCollection<Entity> EntityCollection
{
    get
    {
        return _entityCollection;
    }
    set
    {
        _entityCollection = value;
        RaisePropertyChanged("EntityCollection");
        RaisePropertyChanged("CollectionView");
    }
}
然后绑定数据网格:

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

因此,您仍然希望用户单击列标题,但排序代码却位于视图模型中?Timothy,不,我想您理解错了:我希望排序以编程方式执行,而不需要用户按下列标题。或者换一种说法:我的datagrid的默认排序。是的,列标题显示了正确的排序方向。因此,您仍然希望用户单击列标题,但排序代码却在视图模型中?Timothy,不,我想您理解错了:我希望排序以编程方式执行,而不需要用户按下列标题。或者换一种说法:我的datagrid的默认排序。是的,列标题显示正确的排序方向。我有一个网格,其中列有复选框。我想在顶部的复选框中显示所选项目。我正试图以这种方式实施。但排序不适用于我@AlexI have grid with column have check box。我想在顶部的复选框中显示所选项目。我正试图以这种方式实施。但是分类对我来说不起作用@Alex