Ste*_* CO 1 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();
}
}
Run Code Online (Sandbox Code Playgroud)
除了上述潜在的维护问题之外,它的效果很好。
这是您在 xaml 中使用它的方式:
<TabItem Header="General"
Visibility="{Binding ConverterParameter=IMyType, Converter={StaticResource InterfaceToVisibilityConverter}}">
<TextBlock Text="Whatever Content Goes here."/>
</TabItem>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,它检查当前的 DataContext 以确定它是否支持接口 IMyType,如果支持,则选项卡将可见。如果没有,选项卡将折叠。对于创建对其数据源功能敏感的 UI 非常方便。
有什么办法可以完成我想做的事情吗?
使用{x:Type}标记扩展:
TabItem Header="General"
Visibility="{Binding ConverterParameter={x:Type my:IMyType},
Converter={StaticResource InterfaceToVisibilityConverter}}">
Run Code Online (Sandbox Code Playgroud)