是否有人能够为此问题提供一些指导:
我有一个绑定到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。
数据表在第一列上排序,并显示内容。 用户可以通过单击它们对Name或Path列/标题中的任何一个进行排序,并在视觉上排序/显示正常。问题是当我通过选择特定行来检查网格数据时,DataTable的数据仍未排序。
我的问题是,在用户对其中一列进行排序时,更新网格底层数据的最佳方法是什么? (这需要在适当的列上对DataTable进行排序)
这就是我所观察到的:
即。通过了解当前状态,下一个状态是可确定的。
我已经浏览了类似的帖子并尝试执行以下操作:
通过将我的DataGrid绑定到一个来实验CollectionViewSource。作为实验,我捕获了列标题单击事件并强制列上的排序顺序。这没用。 (我的实施可能有误?)
我在我的XAML中添加了SortedMemberPath =“xx”到特定的DataGridTextColumn条目。
非常感谢任何帮助。
答案 0 :(得分: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
}