繁体   English   中英

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

[英]How to pass an interface type as ConverterParameter in WPF

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

有什么方法可以完成我想做的事情吗?

使用{x:Type}标记扩展名

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM