【发布时间】:2012-08-12 22:48:55
【问题描述】:
有人可以为这个问题提供一些指导吗:
我有一个绑定到 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.
第 3 dt 列未显示在网格上。它被用作 id。
数据表按第一列排序并显示内容。 用户可以通过单击名称或路径列/标题对其进行排序,并且视觉排序是/显示正常。问题是当我通过选择特定行来检查网格数据时,DataTable 的数据仍未排序。
我的问题是,在用户对其中一列进行排序时更新网格基础数据的最佳方法是什么? (这需要在正确的列上对 DataTable 进行排序)
这是我观察到的:
- 在 DataGridColumnHeader 上添加 Click 事件处理程序会触发该事件。 我观察到 columnHeader.SortDirection (在发件人中)的值是 CURRENT 值,而不是目标值。说给定列是否正确 排序顺序经历以下阶段: null --> 升序 降序 --> 升序 从升到降
I.E.通过知道当前状态,下一个状态是可确定的。
- 我可以在 DataGridColumnHeader 的 SortDirection 属性中放置一个触发器以查找 Ascending/Descending/null,但接下来呢?我可以对此执行代码吗? 如果是这样,你能给我看一个代码片段吗?
我浏览过类似的帖子并尝试执行以下操作:
通过将我的 DataGrid 绑定到一个来试验 CollectionViewSource。作为一个实验,我捕获了列标题单击事件并强制对列进行排序。这没有用。 (我的实现可能有问题?)
我将 SortedMemberPath= "xx" 添加到我的 XAML 到特定的 DataGridTextColumn 条目中。
非常感谢任何帮助。
【问题讨论】: