如何在WPF中将接口类型作为ConverterParameter传递

时间:2014-09-07 21:20:50

标签: c# wpf xaml interface ivalueconverter

我希望能够将接口的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。

有没有办法完成我想做的事情?

1 个答案:

答案 0 :(得分:2)

使用{x:Type} Markup Extension

TabItem Header="General" 
        Visibility="{Binding ConverterParameter={x:Type my:IMyType}, 
                             Converter={StaticResource InterfaceToVisibilityConverter}}">