我希望能够将接口的Type对象作为ConverterParameter传递给我的类型转换器。我的想法是,我希望转换器根据源值是否实现特定接口来返回值。
我有一个方法,如果我将类型名称作为字符串传递,但我更喜欢它是一个强类型值,以避免潜在的维护问题,并进行编译时检查而不是依赖于在运行时失败。
这是我使用的转换器:
class InterfaceToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
var type = value.GetType();
if (type.GetInterface(parameter as string) != null)
{ return Visibility.Visible; }
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
除了上面列出的潜在维护问题之外,它的效果很好。
这是你在xaml中使用它的方式:
<TabItem Header="General"
Visibility="{Binding ConverterParameter=IMyType, Converter={StaticResource InterfaceToVisibilityConverter}}">
<TextBlock Text="Whatever Content Goes here."/>
</TabItem>
在上面的示例中,它检查当前的DataContext以确定它是否支持IMyType接口,如果支持,则该选项卡将可见。如果没有,标签将折叠。非常方便用于创建对数据源能够敏感的UI。
有没有办法完成我想做的事情?
答案 0 :(得分:2)
TabItem Header="General"
Visibility="{Binding ConverterParameter={x:Type my:IMyType},
Converter={StaticResource InterfaceToVisibilityConverter}}">