WPF ListView: clasificación por propiedades anidadas
-
19-09-2019 - |
Pregunta
Recientemente me he topado con un problema en el que el WPF ListView
El control parece estar restringiendo la capacidad de ordenar sus elementos. Específicamente, estoy teniendo muchos problemas para tratar de obtener un SortDescription
reconocer las propiedades anidadas (propiedades de las propiedades).
Para la clasificación directa de propetidades, la siguiente línea debe hacer el trabajo:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty",
ListSortDirection.Ascending));
Y de hecho funciona bien para mí. Sin embargo, porque el ItemSource
para mi ListView
es un (fuertemente tipado) DataTable
, algunas de las columnas están vinculadas a propiedades anidadas de la fila (es decir Row.OtherTableRow.SubProperty
Estilo de ruta de enlace): es la forma en que funcionan los conjuntos de datos ADO.NET para bases de datos jerarquiales.
Lo que me gustaría hacer es algo como esto:
listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty",
ListSortDirection.Ascending));
Pero desafortunadamente esa línea arroja un ArgumentException
:
El tipo de 'pedidos' no tiene propiedad llamada 'fila. [Id]', por lo que no puede ordenar la recopilación de datos.
Por extraño que parezca, no tengo problemas para vincularme a las propiedades anidadas. De hecho, los campos se muestran perfectamente bien en el ListView
... ni agregar un PropertyGroupDescription
a listView.GroupDescriptions
Dame cualquier problema con las propiedades anidadas, es solo SortDescriptions
!
¿Es esto pero una limitación de WPF/el ListView
¿control? ¿Hay alguna forma de obtener apoyo como parte del marco, o no tendré suerte allí? Si desafortunadamente lo soy, y esta inconsistencia es inevitable, apreciaría mucho si alguien podría sugerir un truco o solución para este escenario de propiedades anidadas. Ya he probado algunas ideas, pero todas con un éxito mínimo.
Nota: Me doy cuenta de que un ORM bien puede resolver mis problemas, pero me temo que esto no es factible para el proyecto actual en el que estoy trabajando. Los conjuntos de datos simples de ADO.NET tendrán que hacer.
Solución
Según Windows Presentation Foundation Unlamed (Adam Nathan), puede lanzar la vista predeterminada a una lista de ListCollection y establecer una implementación personalizada de ICOMParer en su propiedad CustomSort.