Ordenar una cuadrícula de datos wpf mediante progtwigción

¿Hay alguna manera de ordenar un progtwig WGD DataGrid de forma matemática (por ejemplo, como si hubiera hecho clic en mi primera columna)?

¿Hay alguna manera de simular este clic? O la mejor manera?

Aquí está mi código:

Collection_Evenements = new ObservableCollection(); Collection_Evenements = myEvenement.GetEvenementsForCliCode(App.obj_myClient.m_strCode); Collection_Evenements.CollectionChanged += Collection_Evenements_CollectionChanged; myDataGridEvenements.ItemsSource = Collection_Evenements; System.Data.DataView dv = (System.Data.DataView)myDataGridEvenements.ItemsSource; dv.Sort = "strEvtType"; myDataGridEvenements.Focus(); myDataGridEvenements.SelectedIndex = 0; myDataGridEvenements.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 

No sé por qué, pero la línea “dv.Sort =” strEvtType “;” causa una cosa extraña, mi Window Show y el progtwig no continúan ejecutando las siguientes líneas, ¡sin embargo, no veo el género!

Muchas gracias,

Atentamente,

Nixeus

La solución de voo no me funcionaba, ItemsSource era nula, muy probablemente porque no estaba configurada directamente, sino vinculada. Todas las demás soluciones que encontré aquí en StackOverflow trataban de ordenar el Modelo solamente, pero el encabezado DataGrid no se reflejaba en el ordenamiento.

Aquí hay una solución adecuada basada en el guión incompleto aquí: http://dotnetgui.blogspot.co.uk/2011/02/how-to-properly-sort-on-wpf-datagrid.html

 public static void SortDataGrid(DataGrid dataGrid, int columnIndex = 0, ListSortDirection sortDirection = ListSortDirection.Ascending) { var column = dataGrid.Columns[columnIndex]; // Clear current sort descriptions dataGrid.Items.SortDescriptions.Clear(); // Add the new sort description dataGrid.Items.SortDescriptions.Add(new SortDescription(column.SortMemberPath, sortDirection)); // Apply sort foreach (var col in dataGrid.Columns) { col.SortDirection = null; } column.SortDirection = sortDirection; // Refresh items to display sort dataGrid.Items.Refresh(); } 

En el caso de su código, se puede usar así:

 SortDataGrid(myDataGridEvenements, 0, ListSortDirection.Ascending); 

O al usar los valores de parámetros predeterminados, simplemente:

 SortDataGrid(myDataGridEvenements); 

Obtenga su DataView de ItemsSource y use su propiedad Sort para especificar la columna que está ordenando:

 (yourDataGrid.ItemsSource as DataView).Sort = "NAME_OF_COLUMN"; 

puede usar ICollectionView para filtrar, clasificar y agrupar sus elementos en una cuadrícula de datos.

EDITAR: agrega Ordenar, no leyó la pregunta con cuidado 🙂

  var view = CollectionViewSource.GetDefaultView(this.MyData); view.Filter = ViewFilter; view.SortDescriptions.Add(new SortDescription("MyPropertyToSort", ListSortDirection.Descending)); private bool ViewFilter(object obj) { var item = obj as MyObject; if (item == null) return false; //your filter logik goes here if(item.MyStringProp.StartsWith("Test")) return false; return true; } 

Mi método es trabajo para mí Solo prueba este código Perdón por el ruso

 // Если таблица пустая, то привязываем ее к журналу if(dgEvents.ItemsSource == null) dgEvents.ItemsSource = events.Entries; // Обновляем записи CollectionViewSource.GetDefaultView(dgEvents.ItemsSource).Refresh(); // Очищаем описание сортировки dgEvents.Items.SortDescriptions.Clear(); // Созадем описание сортировки dgEvents.Items.SortDescriptions.Add(new SortDescription(dgEvents.Columns[0].SortMemberPath, ListSortDirection.Descending)); // Очищаем сортировку всех столбцов foreach (var col in dgEvents.Columns) { col.SortDirection = null; } // Задаем сортировку времени по убыванию (последняя запись вверху) dgEvents.Columns[0].SortDirection = ListSortDirection.Descending; // Обновляем записи dgEvents.Items.Refresh(); 

El método PerformSort de DataGrid es lo que realmente se ejecutó en el clic de encabezado de una columna. Sin embargo, este método es interno. Entonces, si realmente quieres simular el clic , necesitas usar la reflexión:

 public static void SortColumn(DataGrid dataGrid, int columnIndex) { var performSortMethod = typeof(DataGrid) .GetMethod("PerformSort", BindingFlags.Instance | BindingFlags.NonPublic); performSortMethod?.Invoke(dataGrid, new[] { dataGrid.Columns[columnIndex] }); }