Điều này dựa trên câu trả lời của @ AndyG nhưng an toàn hơn một chút vì nó được nhập mạnh mẽ.
Thực hiện một IValueConverter tên DataTypeConverter, mà chấp nhận một đối tượng và trả về Type của nó (như là một 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();
}
}
Thay đổi DataTrigger bạn để sử dụng chuyển đổi, và thiết lập giá trị Type:
<DataTrigger Binding="{Binding SelectedItem,
Converter={StaticResource DataTypeConverter}}"
Value="{x:Type local:MyType}">
...
</DataTrigger>
Declare DataTypeConverter trong các nguồn:
<UserControl.Resources>
<v:DataTypeConverter x:Key="DataTypeConverter"></v:DataTypeConverter>
</UserControl.Resources>
Nguồn
2011-02-11 04:40:48
+1 cho ý tưởng chung, tuy nhiên trình biến đổi phải trả về đối tượng Loại thay vì tên của nó ... –
Điều đó có hiệu quả không? Sẽ không phải là thời gian chạy được so sánh một cái gì đó của loại String để một cái gì đó loại Type? Tôi biết nó xử lý việc chuyển đổi/so sánh hầu hết các loại giá trị nhưng không quen thuộc với cách nó xử lý các so sánh Kiểu khác. – AndyG
Có, nó sẽ hoạt động, bạn chỉ cần sử dụng phần mở rộng đánh dấu {x: Type} trong giá trị của DataTrigger. –