¿Cuál es la diferencia entre a ControlTemplatey a DataTemplateen WPF?
fuente
¿Cuál es la diferencia entre a ControlTemplatey a DataTemplateen WPF?
Normalmente, un control se representa por sí mismo y no refleja los datos subyacentes. Por ejemplo, un Buttonno estaría vinculado a un objeto comercial, está allí solo para que se pueda hacer clic en él. A ContentControlo ListBox, sin embargo, generalmente aparecen para que puedan presentar datos para el usuario.
A DataTemplate, por lo tanto, se utiliza para proporcionar una estructura visual para los datos subyacentes, mientras que a ControlTemplateno tiene nada que ver con los datos subyacentes y simplemente proporciona un diseño visual para el control en sí.
A ControlTemplategeneralmente solo contendrá TemplateBindingexpresiones, vinculando de nuevo a las propiedades del control en sí, mientras DataTemplateque contendrá expresiones de enlace estándar, vinculando a las propiedades de su DataContext(el objeto de negocio / dominio o modelo de vista).
Básicamente,
ControlTemplatedescribe cómo mostrar un Control, mientras queDataTemplatedescribe cómo mostrar Datos.Por ejemplo:
A
Labeles un control e incluirá unControlTemplateque dice queLabeldebe mostrarse utilizando unBordercontenido (unDataTemplatecontrol u otro).Una
Customerclase es Datos y se mostrará usando unaDataTemplateque podría decir que muestra elCustomertipo como queStackPanelcontiene dos,TextBlocksuno que muestra el Nombre y el otro que muestra el número de teléfono. Puede ser útil tener en cuenta que todas las clases se muestran usandoDataTemplates, por lo general, usará la plantilla predeterminada que es unaTextBlockcon laTextpropiedad establecida como resultado delToStringmétodo del Objeto .fuente
Troels Larsen tiene una buena explicación en el foro de MSDN
fuente
ControlTemplate: Representa el estilo de control.DataTemplate: Representa el estilo de datos (¿Cómo le gustaría mostrar sus datos?).Todos los controles utilizan una plantilla de control predeterminada que puede anular mediante la propiedad de plantilla.
Por ejemplo, la
Buttonplantilla es una plantilla de control.Buttonplantilla de contenido es una plantilla de datosfuente
ControlTemplate- Cambiar la apariencia del elemento. Por ejemploButtonpuede contener imagen y textoDataTemplate- Representar los datos subyacentes utilizando los elementos.fuente
ControlTemplateDEFINA la apariencia visual,DataTemplateREEMPLAZA la apariencia visual de un elemento de datos.Ejemplo: quiero mostrar un botón de forma rectangular a círculo => Plantilla de control.
Y si tiene objetos complejos para el control, solo llama y muestra
ToString(), con losDataTemplateque puede obtener varios miembros y mostrar y cambiar sus valores del objeto de datos.fuente
Todas las respuestas anteriores son geniales, pero hay una diferencia clave que se perdió. Eso ayuda a tomar mejores decisiones sobre cuándo usar qué. Es
ItemTemplatepropiedad:DataTemplate se utiliza para elementos que proporcionan la propiedad ItemTemplate para que pueda reemplazar el contenido de sus elementos utilizando
DataTemplates que defina previamente de acuerdo con los datos vinculados a través de un selector que proporcione.Pero si su control no le brinda este lujo , aún puede utilizar uno
ContentViewque puede mostrar su contenido predefinidoControlTemplate. Curiosamente, puede cambiar laControlTemplatepropiedad de suContentViewen tiempo de ejecución. Una cosa más a tener en cuenta es que a diferencia de los controles conItemTemplatepropiedad, no puede tener unTemplateSelectorcontrol para este (ContentView). Sin embargo, aún puede crear disparadores para cambiar elControlTemplatetiempo de ejecución.fuente