Questo è basato sulla risposta di @ AndyG, ma è un po 'più sicuro perché è fortemente digitato.
Implementare un IValueConverter nome DataTypeConverter, che accetta un oggetto e restituisce il tipo (come 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();
}
}
Cambia la tua DataTrigger Per utilizzare il convertitore, e impostare il valore per il tipo:
<DataTrigger Binding="{Binding SelectedItem,
Converter={StaticResource DataTypeConverter}}"
Value="{x:Type local:MyType}">
...
</DataTrigger>
Declare DataTypeConverter nelle risorse:
<UserControl.Resources>
<v:DataTypeConverter x:Key="DataTypeConverter"></v:DataTypeConverter>
</UserControl.Resources>
fonte
2011-02-11 04:40:48
+1 per l'idea generale, tuttavia il convertitore dovrebbe restituire l'oggetto Type piuttosto che il suo nome ... –
Potrebbe funzionare? Il runtime non dovrebbe confrontare qualcosa di tipo String a qualcosa di tipo Type? So che gestisce la conversione/confronto della maggior parte dei tipi di valore, ma non ha familiarità con il modo in cui gestisce altri confronti di tipo. – AndyG
Sì, funzionerebbe, devi solo usare l'estensione di markup {x: Type} nel valore di DataTrigger. –