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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top