Esto se basa en la respuesta de @ AndyG, pero es un poco más seguro porque está fuertemente tipado.
Implementar un llamado IValueConverter DataTypeConverter, que acepta un objeto y devuelve su tipo (como System.Type):
public class DataTypeConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
return value.GetType();
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
throw new NotImplementedException();
}
}
Cambiar la DataTrigger utilizar el convertidor, y establecer el valor de la Tipo:
<DataTrigger Binding="{Binding SelectedItem,
Converter={StaticResource DataTypeConverter}}"
Value="{x:Type local:MyType}">
...
</DataTrigger>
DataTypeConverter Declare en los recursos:
<UserControl.Resources>
<v:DataTypeConverter x:Key="DataTypeConverter"></v:DataTypeConverter>
</UserControl.Resources>
+1 para la idea general, sin embargo, el convertidor debería devolver el objeto Type en lugar de su nombre ... –
¿Funcionaría eso? ¿No estaría el tiempo de ejecución comparando algo de tipo String a algo de tipo Type? Sé que maneja la conversión/comparación de la mayoría de los tipos de valor, pero no está familiarizado con la forma en que maneja otras comparaciones de tipos. – AndyG
Sí, funcionaría, solo tiene que usar la extensión de marcado {x: Type} en el valor DataTrigger. –