Jest to oparte na odpowiedzi @ AndyG, ale jest nieco bezpieczniejsze, ponieważ jest mocno wpisane.
Wdrożenie IValueConverter nazwie DataTypeConverter, który akceptuje obiekt i zwraca jego typu (jako 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();
}
}
Zmień DataTrigger używać przetwornicy, i ustawić wartość na typ:
<DataTrigger Binding="{Binding SelectedItem,
Converter={StaticResource DataTypeConverter}}"
Value="{x:Type local:MyType}">
...
</DataTrigger>
Declare DataTypeConverter w zasobach:
<UserControl.Resources>
<v:DataTypeConverter x:Key="DataTypeConverter"></v:DataTypeConverter>
</UserControl.Resources>
+1 dla ogólnej idei, jednak konwerter powinien zwracać obiekt typu, a nie jego nazwę ... –
Czy to działa? Czy środowisko wykonawcze nie porównywałoby czegoś typu String z typem Type? Wiem, że obsługuje konwersję/porównywanie większości typów wartości, ale nie zna sposobu, w jaki obsługuje inne porównania typów. – AndyG
Tak, to by działało, po prostu musisz użyć rozszerzenia znaczników {x: Type} w wartości DataTrigger. –