C# 如何在对datagrid的列重新排序后获得新的列顺序?
在数据网格中拖放一些列之后,如何以MVVM方式将新的顺序传递给Viewmodel 事件组非常奇怪 DataGrid_Reordered传递仅包含单个列的DataGridColumnEventArgs。我该拿它怎么办?我如何知道列的新顺序 很明显,列的顺序是由DisplayIndex决定的,但是我如何知道旧值是什么,新值是什么,以及这与整个列集合有什么关系呢 非常感谢,很好的问题:-)我猜您是在重新启动应用程序后对列顺序进行持久化 我不太喜欢网格,所以我没有任何具体的建议,但在我看来,您最终将在视图模型(或新视图模型)中创建一组属性,这些属性对柱及其顺序进行建模 我想您必须关闭AutoGenerateColumns,在Xaml中定义所需的列,并在每个列的Header和DisplayIndex属性上使用双向绑定,以绑定到VM中的适当值 这样,您可以使用MVVM Light中的EventToCommand行为,将其绑定到网格的ColumnReordering事件和viewmodel中的RelayCommand。因为VM负责保持列的顺序,所以当事件触发时,您将拥有它C# 如何在对datagrid的列重新排序后获得新的列顺序?,c#,.net,wpf,silverlight,datagrid,C#,.net,Wpf,Silverlight,Datagrid,在数据网格中拖放一些列之后,如何以MVVM方式将新的顺序传递给Viewmodel 事件组非常奇怪 DataGrid_Reordered传递仅包含单个列的DataGridColumnEventArgs。我该拿它怎么办?我如何知道列的新顺序 很明显,列的顺序是由DisplayIndex决定的,但是我如何知道旧值是什么,新值是什么,以及这与整个列集合有什么关系呢 非常感谢,很好的问题:-)我猜您是在重新启动应用程序后对列顺序进行持久化 我不太喜欢网格,所以我没有任何具体的建议,但在我看来,您最终将在视
HTH在我的页面中,我为数据网格设置了一个事件,用于加载
和列displayedIndexChanged
。这对两者都很重要,我将在底部解释
<DataGrid x:Name="dataGrid"
Loaded="dataGrid_Loaded"
ColumnDisplayIndexChanged="dataGrid_ColumnDisplayIndexChanged"
ItemsSource="{Binding modulecollection,
Source={StaticResource viewmodel}}"/>
好的,您需要加载中的事件来获取基线。这里,我的DataGrid
从绑定源加载,因此我不会有列顺序的基线,除非在加载网格时捕获它
您需要ColumnDisplayedIndexChanged
,因为您希望跟踪列顺序的更改
我发现了一件重要的事情,当用户将列移动到几行上时,ColumnDisplayedIndexChanged
为移动到的每个索引激发。正如您在下面看到的,由于移动了一列,因此事件将针对其移动到的每个空间触发。DataGridColumn
的Header对象也变为null。因此,如果您使用这种方法,请小心,您可能需要添加一些额外的处理。或者利用它来跟踪对变化的响应。示例:除非headervalue不为null,否则不要重新计算后台线程中的内容
原件:
A|B|C <- Column Name
0|1|2 <- Column Index
用户移动一列,然后ColumnDisplayedIndexChanged
事件如下所示:
第一项活动:
null | B | C
0 | 1 | 2
第二项活动:
B | null | C
0 | 1 | 2
第三项活动:
B | C | A
0 | 1 | 2
也许这个答案对你有用
B | null | C
0 | 1 | 2
B | C | A
0 | 1 | 2