Como você usa um DataTemplate direcionado por DataType junto com o GridView?
Antes de responder: Esta questão é sobre o WPFListView
controle (comGridView
). Isto énão sobre o WPFDataGrid
controle, ASP.NETDataGrid
ouListView
controles, ou do WinFormDataGridView
ouListView
controles. Todos eles soam muito parecidos e costumam ser confusos, mas uma resposta para o tipo errado de controle é inútil para mim e, mais importante, uma perda do tempo que você levou para escrever a resposta, que, acredito, não deve ser desperdiçada.
eu tenho umListView
controle comGridView
que tem várias colunas vinculadas às propriedades do meu modelo de visualização. Eu posso facilmente personalizar a aparência visual doGridViewColumn
células, especificando umCellTemplate
(seja em linha ou por meio de um recurso).
Agora eu tenho uma propriedade particular no meu modelo de visão; seu tipo é uma classe base abstrata e seu valor pode ser um dos vários tipos derivados. Cada tipo derivado deve ter um diferenteDataTemplate
na célula. Felizmente,GridViewColumn
tem umCellTemplateSelector
que faz exatamente o que eu quero, mas requer escrever algum código de encanamento. Mas olhando a página paraDataTemplateSelector
diz:
Observe que, se você tiver objetos de tipos diferentes, poderá definir a propriedade DataType no DataTemplate. Se você fizer isso, não há necessidade de criar um DataTemplateSelector. [...] Para mais informações, vejaVisão geral de modelagem de dados.
Viva! Não há necessidade de escrever código de encanamento. Meus tiposestá diferente, então isso parece um ajuste perfeito. Mas, infelizmente, mesmo depois de definir umDataTemplate
com umDataType
que corresponde a um tipo derivado específico de uma das colunas de ligação de dados (ligado usandoGridViewColumn
'sDisplayMemberBinding
), não teve efeito.
Eu simplesmente quero mostrar um diferenteDataTemplate
de acordo com o tipo de tempo de execução de uma determinada coluna no meuGridView
. EstáDataType
-visadasDataTemplates
simplesmente incompatível comGridView
? Existe uma maneira de usá-los, ou devo recorrer à especificação de umCellTemplateSelector
? Talvez haja uma maneira de especificar múltiplosDataTemplate
s dentroGridViewColumn
'sCellTemplate
, para que oDataType
propriedade terá um efeito?