Qual é a diferença entre a ControlTemplate
e a DataTemplate
no WPF?
fonte
Qual é a diferença entre a ControlTemplate
e a DataTemplate
no WPF?
Normalmente, um controle é renderizado por si só e não reflete dados subjacentes. Por exemplo, um Button
não seria vinculado a um objeto de negócios - ele existe apenas para que ele possa ser clicado. A ContentControl
ou ListBox
, no entanto, geralmente aparecem para que eles possam apresentar dados para o usuário.
A DataTemplate
, portanto, é usado para fornecer estrutura visual aos dados subjacentes, enquanto a ControlTemplate
não tem nada a ver com os dados subjacentes e simplesmente fornece layout visual para o próprio controle.
A ControlTemplate
geralmente conterá apenas TemplateBinding
expressões, vinculando de volta às propriedades no controle em si, enquanto a DataTemplate
conterá expressões de ligação padrão, vinculando-se às propriedades de seu DataContext
(o objeto de negócios / domínio ou o modelo de exibição).
Basicamente, a
ControlTemplate
descreve como exibir um controle, enquantoDataTemplate
descreve como exibir dados.Por exemplo:
A
Label
é um controle e incluirá umControlTemplate
que diz queLabel
deve ser exibido usando umBorder
conteúdo em torno de algum (umDataTemplate
ou outro controle).Uma
Customer
classe é Data e será exibida usando umDataTemplate
que poderia dizer exibir oCustomer
tipo como umStackPanel
contendo dois,TextBlocks
mostrando o Nome e o outro exibindo o número de telefone. Pode ser útil observar que todas as classes são exibidas usandoDataTemplates
, você geralmente usará o modelo padrão que é aTextBlock
com aText
propriedade configurada para o resultado doToString
método do Objeto .fonte
Troels Larsen tem uma boa explicação no fórum do MSDN
fonte
ControlTemplate
: Representa o estilo de controle.DataTemplate
: Representa o estilo dos dados (como você gostaria de mostrar seus dados).Todos os controles estão usando o modelo de controle padrão que você pode substituir pela propriedade do modelo.
Por exemplo,
Button
modelo é um modelo de controle.Button
modelo de conteúdo é um modelo de dadosfonte
ControlTemplate
- Alterando a aparência do elemento. Por exemplo,Button
pode conter imagem e textoDataTemplate
- Representando os dados subjacentes usando os elementos.fonte
ControlTemplate
DEFINA a aparência visual,DataTemplate
SUBSTITUI a aparência visual de um item de dados.Exemplo: quero mostrar um botão de retangular para circular = = Modelo de Controle.
E se você tiver objetos complexos para o controle, ele apenas chama e mostra
ToString()
, comDataTemplate
você pode obter vários membros e exibir e alterar seus valores do objeto de dados.fonte
Todas as respostas acima são ótimas, mas há uma diferença fundamental que foi perdida. Isso ajuda a tomar melhores decisões sobre quando usar o quê. É
ItemTemplate
propriedade:DataTemplate é usado para elementos que fornecem a propriedade ItemTemplate para você substituir o conteúdo de seus itens usando
DataTemplate
s definidos anteriormente de acordo com os dados vinculados por meio de um seletor que você fornece.Mas se o seu controle não fornecer esse luxo para você , você ainda poderá usar um
ContentView
que possa exibir o conteúdo predefinidoControlTemplate
. Curiosamente, você pode alterar aControlTemplate
propriedade do seuContentView
em tempo de execução. Mais uma coisa a observar que, diferentemente dos controles comItemTemplate
propriedade, você não pode ter umTemplateSelector
para esse controle (ContentView). No entanto, você ainda pode criar gatilhos para alterar oControlTemplate
tempo de execução.fonte