Selector de plantilla de datos WPF basado en tipos genéricos
He visto muchos ejemplos de cómo usar Data Template Selector para mostrar controles diferentes según el x:TargetType. Quiero crear un control de elementos que muestre un RadioButton, TextBox o TextBlock según el tipo de clase.
Mi clase podría ser así:
public class MyExample<t>
{
public string Name {get;set;}
public Type Type => typeof(T);
public T Value {get;set;}
}
Sé que el Xaml no puede reconocer los genéricos y no quiero crear una extensión de marcado para admitir genéricos, quiero mantenerlo simple. No quiero crear una clase concreta para cada tipo.
Sé que puedo usar un Data Trigger para establecer la plantilla de contenido según una propiedad (por ejemplo, el nombre de tipo o Type Type), pero creo que debería haber una forma más fácil de usar un Data Template Selector. ¿Puedo usar el TargetType en la propiedad Type en lugar del tipo de clase?
davy.ai
Sí, puede utilizar la propiedad TargetType del DataTemplateSelector para seleccionar de forma dinámica la plantilla adecuada basada en la propiedad Type de su clase MyExample. Aquí tienes un ejemplo de implementación de un DataTemplateSelector:
En este ejemplo, el método SelectTemplate verifica la propiedad Type del objeto MyExample y devuelve la DataTemplate adecuada según el tipo.
Puede definir las plantillas para los controles de botón de radio, cuadro de texto y bloque de texto en su XAML y hacer referencia a ellas en el DataTemplateSelector.
Ten en cuenta que en esta implementación asumí que el tipo solo podía ser booleano o una cadena, pero puedes modificarlo según tus requisitos.