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 doGridViewColumncé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últiplosDataTemplates dentroGridViewColumn'sCellTemplate, para que oDataType propriedade terá um efeito?

questionAnswers(2)

yourAnswerToTheQuestion