2012-03-05 73 views
7

WPF Datagridがユーザーによって並べ替えられていることがわかりました。 Sortedイベントはなぜですか?私はSortingイベントしか見つけることができません。Datagrid:Sortedイベントはありませんか?

私はまた、ビューにオブジェクトを公開している、CollectionViewListCollectionViewを調査しました。

これは箱から出てくるので、私はかなり驚いています。 アイデア

+0

MSDNには、 "なぜ" を聞いてより良い場所かもしれません。 –

+0

ハンドルDataGridにソートし、並べ替えだけを渡します。 – Paparazzi

+0

ハンドルソート?あなたは並べ替えを意味しますか? – Houman

答えて

1

datagridには「並べ替え」イベントがあり、それを購読してください!

XAML:

<DataGrid ItemsSource="{Binding YourItems}" AutoGenerateColumns="True" anUserSortColumns="True" 
      Sorting="DataGrid_Sorting"/> 

は.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)); 
} 
+1

これは間違いなく受け入れられているはずです – Jonesopolis

+3

これは正解ではありません。 OPは具体的にはソートイベントではなく、ソートイベントを望んでいると言います。違いは、アイテムが既にソートされているかどうかです。 Oliver Dufnerのコメント[重複する質問](http://stackoverflow.com/questions/8416961/how-can-i-be-notified-if-a-datagrid-column-is-sorted-and-not-sorting)を指している)は正しい応答です。 – Wally

1

私はMSDN documentationから例をとると、ソートイベントが行われたときにソートされたイベントを発生させるために、それを調整してきました。

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(); 
    } 
} 

コードビハインドで使用できます。

datagrid.Sorted += new RoutedEventHandler(datagrid_Sorted); 

またはXAML

<local:CustomDataGrid x:Name="datagrid" Sorted="datagrid_Sorted;"/> 
関連する問題