c# - 如何在 WPF 中强制 DataGrid 组顺序?

标签 c# wpf datagrid

我有这样的代码:

StatusItems = new ObservableCollection<StatusItem> { };
StatusItemsGrouped = new ListCollectionView(StatusItems);
StatusItemsGrouped.GroupDescriptions.Add(new PropertyGroupDescription("GenericStatus"));
StatusItemsGrouped.SortDescriptions.Add(new SortDescription("GenericStatus", ListSortDirection.Descending));

基本上,我根据名为 GenericStatus 的信息对 DataGrid 上的数据进行分组。除了排序,一切都很好。我现在想要实现的是按降序对组进行排序(正如我的代码所做的那样),但是上面代码的问题是,一旦用户单击某个列,排序就会被破坏。

我想保留群组排序,但仍允许用户排序​​。我猜用户排序基本上是次要排序,即我想要这样:ORDER BY GenericStatus DESC, UsersColumnOfChoise ASC/DESC

最佳答案

我自己刚遇到这个问题,我的解决方案是拦截 Sorting 事件,让 ICollectionView 在 ViewModel 中进行排序,而不是依赖 DataGrid 来处理它。

XAML:

<DataGrid ItemsSource="{Binding StatusItemsGrouped}" Sorting="OnSorting_"/>

XAML.CS:

private void OnSorting_(object sender, DataGridSortingEventArgs e)
{
    var viewModel = DataContext as ViewModel;
    e.Handled = true;                                 // prevent DataGrid from sorting
    viewModel.SortItemSource(e.Column);               // perform sorting
    e.Column.SortDirection = viewModel.SortDirection; // set sort direction icon on column header
}

View 模型:

public class ViewModel 
{
    public ListCollectionView StatusItemsGrouped { get; set; }
    public ListSortDirection SortDirection { get; set; }
    public string SortColumn { get; set; }

    public void SortItemSource(string columnName)
    {
        if (String.Compare(SortColumn, columnName, true) == 0)
            SortDirection = ListSortDirection.Ascending;
        else
            SortDirection = ListSortDirection.Descending;
        SortColumn = columnName;
        using(StatusItemsGrouped.DeferRefresh()) {
            StatusItemsGrouped.GroupDescriptions.Clear();
            StatusItemsGrouped.SortDescriptions.Clear();
            StatusItemsGrouped.SortDescriptions.Add(new SortDescription(SortColumn, SortDirection));
            StatusItemsGrouped.GroupDescriptions.Add(new PropertyGroupDescription("GenericStatus"));
        }
        StatusItemsGrouped.Refresh();
    }
}

关于c# - 如何在 WPF 中强制 DataGrid 组顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10353535/

相关文章:

c# - 有没有办法在应用程序中显示数据集可视化工具?

c# - 如何在 C# 中格式化异常的堆栈跟踪?

WPF Multitouch DeltaManipulation 鼠标事件等效?

c# - 分解和简化复杂的 WPF 自定义控件的好方法是什么?

c# - 显示 DataTable 的值

c# - WPF DataGrid ItemsSource 问题

wpf - 如何以编程方式访问数据网格行详细信息控件

c# - 添加到列表会重新填充最后一个元素

WPF - 将 WPF 应用程序中列表的选择样式更改为默认的 Windows 7 样式

c# - 通用列表更改 C# 上的计数器