1

有人可以为这个问题提供一些指导:

我有一个绑定到 DataTable 的 DataGrid。

相关 XAML 和代码:

<DataGrid Name="dataGrid1" IsReadOnly="True" ItemsSource="{Binding}" 
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
<DataGridTextColumn Header="Path" Binding="{Binding Path=Path}" />
</DataGrid.Columns>


dataGrid1.DataContext = gridData.dt; // this is a DataTable with 3 columns.

第三个 dt 列未显示在网格上。它被用作 id。

数据表按第一列排序并显示内容。用户可以通过单击名称或路径列/标题对其进行排序,并且视觉排序是/显示正常。问题是当我通过选择特定行来检查网格的数据时,DataTable 的数据仍然未排序。

我的问题是,在用户对其中一列进行排序时更新网格基础数据的最佳方法是什么?(这需要在正确的列上对 DataTable 进行排序)

这是我观察到的:

  1. 在 DataGridColumnHeader 上添加 Click 事件处理程序会触发该事件。我观察到 columnHeader.SortDirection 的值(在发件人中)是当前值,而不是目标值。说给定的列排序顺序经过这些阶段是否正确:null->升序降序->升序升序降序

IE 通过知道当前状态,可以确定下一个状态。

  1. 我可以在 DataGridColumnHeader 的 SortDirection 属性中放置一个触发器,以查找 Ascending/Descending/null 但是然后呢?我可以对此执行代码吗?如果是这样,你能告诉我一个代码片段吗?

我浏览过类似的帖子并尝试执行以下操作:

  • 通过将我的 DataGrid 绑定到一个来试验 CollectionViewSource。作为一个实验,我捕获了列标题单击事件并强制对列进行排序。这没有用。(我的实现可能是错误的?)

  • 我将 SortedMemberPath= "xx" 添加到我的 XAML 到特定的 DataGridTextColumn 条目中。

非常感谢任何帮助。

4

1 回答 1

1

使用DataGrid.Sorting事件:

public class DataGrid : MultiSelector
{
    ...

    //
    // Summary:
    //     Occurs when a column is being sorted.
    public event DataGridSortingEventHandler Sorting;

    ...
}

在事件处理程序中,使用e.Column属性找出用于对数据进行排序的列:

void dataGrid1_Sorting(object sender, DataGridSortingEventArgs e)
{
    e.Column ... // TODO
}
于 2012-08-16T15:18:24.460 回答