Pergunta

Recentemente, tropecei em um problema em que o WPF ListView O controle parece estar restringindo a capacidade de classificar seus itens. Especificamente, estou tendo muitos problemas para tentar obter um SortDescription reconhecer propriedades aninhadas (propriedades das propriedades).

Para classificação direta por propriedades, a linha a seguir deve fazer o trabalho:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty",
    ListSortDirection.Ascending));

E de fato funciona bem para mim. No entanto, porque o ItemSource para o meu ListView é um (fortemente tibra) DataTable, algumas das colunas estão vinculadas a propriedades aninhadas da linha (ou seja, Row.OtherTableRow.SubProperty Estilo do caminho de ligação) - é a maneira como os conjuntos de dados ADO.NET funcionam para bancos de dados hierarquiais.

O que eu gostaria de fazer é algo assim:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty",
    ListSortDirection.Ascending));

Mas infelizmente essa linha joga um ArgumentException:

O tipo de 'pedidos' não possui propriedade denominada 'linha. [Id]', portanto, não pode classificar a coleta de dados.

Estranhamente, não tenho nenhum problema em vincular a propriedades aninhadas. De fato, os campos aparecem perfeitamente bem no ListView... nem adicionar um PropertyGroupDescription para listView.GroupDescriptions me dê algum problema com propriedades aninhadas - é apenas SortDescriptions!

É isso apenas uma limitação de wpf/o ListView ao controle? Existe alguma maneira de obter apoio como parte da estrutura ou ficarei sem sorte lá? Se eu infelizmente sou, e essa inconsistência é inevitável, eu apreciaria muito se alguém pudesse sugerir um hack ou solução alternativa para esse cenário de propriedades aninhadas. Eu já tentei algumas idéias, mas tudo com um sucesso mínimo.

Nota: percebo que um ORM pode resolver meus problemas, mas receio que isso não seja viável para o projeto atual em que estou trabalhando. Os conjuntos de dados simples do ADO.NET terão que fazer.

Foi útil?

Solução

De acordo com a Windows Apresentation Foundation Unnized (Adam Nathan), você pode lançar a visualização padrão em uma ListCollectionView e definir uma implementação personalizada do ICOMPARER em sua propriedade Alfabaramente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top