Ceci est basé sur la réponse de @ AndyG mais est un peu plus sûr car il est fortement typé.
Mettre en œuvre un IValueConverter nommé DataTypeConverter, qui accepte un objet et renvoie son type (comme 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();
}
}
Changer votre DataTrigger d'utiliser le convertisseur, et définir la valeur à la Type:
<DataTrigger Binding="{Binding SelectedItem,
Converter={StaticResource DataTypeConverter}}"
Value="{x:Type local:MyType}">
...
</DataTrigger>
Declare DataTypeConverter des ressources:
<UserControl.Resources>
<v:DataTypeConverter x:Key="DataTypeConverter"></v:DataTypeConverter>
</UserControl.Resources>
+1 pour l'idée générale, mais le convertisseur devrait renvoyer l'objet Type plutôt que son nom ... –
Cela fonctionnerait-il? Est-ce que le runtime ne comparerait pas quelque chose de type String à quelque chose de type Type? Je sais qu'il gère la conversion/la comparaison de la plupart des types de valeur, mais ne sait pas comment il gère les autres comparaisons de type. – AndyG
Oui, cela fonctionnerait, il vous suffit d'utiliser l'extension de balisage {x: Type} dans la valeur de DataTrigger. –