我需要知道用户何时对WPF Datagrid进行了排序.为什么没有Sorted活动?我只能找到一个排序事件.
我也调查过CollectionView,ListCollectionView那就是将对象暴露给View,没有任何运气.
我很惊讶,因为这应该是开箱即用的.有任何想法吗?
我从MSDN 文档中获取了一个示例,并对其进行了调整,以在 Sorting 事件完成时引发 Sorted 事件。
public class CustomDataGrid : DataGrid
{
// Create a custom routed event by first registering a RoutedEventID
// This event uses the bubbling routing strategy
public static readonly RoutedEvent SortedEvent = EventManager.RegisterRoutedEvent(
"Sorted", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CustomDataGrid));
// Provide CLR accessors for the event
public event RoutedEventHandler Sorted
{
add { AddHandler(SortedEvent, value); }
remove { RemoveHandler(SortedEvent, value); }
}
// This method raises the Sorted event
void RaiseSortedEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(CustomDataGrid.SortedEvent);
RaiseEvent(newEventArgs);
}
protected override void OnSorting(DataGridSortingEventArgs eventArgs)
{
base.OnSorting(eventArgs);
RaiseSortedEvent();
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以在代码隐藏中使用它。
datagrid.Sorted += new RoutedEventHandler(datagrid_Sorted);
Run Code Online (Sandbox Code Playgroud)
或在 XAML 中
<local:CustomDataGrid x:Name="datagrid" Sorted="datagrid_Sorted"/>
Run Code Online (Sandbox Code Playgroud)
这里是当数据网格完成排序时将被触发的方法:
private void datagrid_Sorted(object sender, RoutedEventArgs args)
{
var datagrid = (CustomDataGrid)sender;
var sortedItems = datagrid.Items;
}
Run Code Online (Sandbox Code Playgroud)
您仍然可以订阅 DataGrid 排序事件:
<local:CustomDataGrid x:Name="datagrid" Sorting="datagrid_Sorted;"/>
Run Code Online (Sandbox Code Playgroud)
但为了确保您的操作在排序完成后发生,请使用 Dispatcher :
private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
this.Dispatcher.BeginInvoke((Action)delegate()
{
//runs after sorting is done
}, null);
}
Run Code Online (Sandbox Code Playgroud)
这样,就不需要自定义 Datagrid 类。
datagrid 有“排序”活动,订阅它!
XAML:
<DataGrid ItemsSource="{Binding YourItems}" AutoGenerateColumns="True" anUserSortColumns="True"
Sorting="DataGrid_Sorting"/>
Run Code Online (Sandbox Code Playgroud)
.cs代码:
private void DataGrid_Sorting(object sender, System.Windows.Controls.DataGridSortingEventArgs e)
{
Console.WriteLine(string.Format("sorting grid by '{0}' column in {1} order", e.Column.SortMemberPath, e.Column.SortDirection));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6520 次 |
| 最近记录: |