我有一个带有两个继承的ModuleTypes的ModuleType:PayModule和FreeModule。
我还有一个带有这个ItemSource的TreeView:
<Expander Header="{Binding PayModuleItem.Name}"
Visibility="{Binding PayModuleItem, Converter={StaticResource TypeToVisibleConverter}}">
在我的DataTemplates中有几个Expander。只有在TreeViewItem具有DataType PayModule
时才能看到其中一个public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Collapsed;
if (value is PayModule)
return Visibility.Visible;
return Visibility.Collapsed;
}
这是我的TypeToVisibleConverter。它是特定类型的。是否可以获得通用转换器?
<Expander Header="{Binding PayModuleItem.Name}"
Visibility="{Binding PayModuleItem, Converter={StaticResource TypeToVisibleConverter},
ConverterParameter={x:Type my:PayModule}}">
我希望通过ConverterParameter传递所需类型,然后转换为它,例如:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Collapsed;
if (value is typeOf(parameter)
return Visibility.Visible;
return Visibility.Collapsed;
}
-
{{1}}
答案 0 :(得分:3)
它应该像这样工作:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null && value.GetType() == parameter as Type
? Visibility.Visible
: Visibility.Collapsed;
}
如果您还希望能够检查基类或接口:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var type = parameter as Type;
return type != null && type.IsInstanceOfType(value)
? Visibility.Visible
: Visibility.Collapsed;
}
答案 1 :(得分:1)
parameter
的类型始终为类型Type
,只需将其(Type)parameter
强制转换为is (Type)parameter
。此外,由于if ((parameter as Type)?.IsAssignableFrom(value.GetType()) ?? false)
return Visibility.Visible;
无效,您可以使用此功能:
@property (strong, nonatomic) IBOutlet UILabel *name;
编辑:
只是指出差异:克莱门斯&#39;答案要容易得多,如果您只想要一个特定类型,请使用该类型。我也会为继承类型工作。
编辑2:
不再是真的,现在结果将是相同的:)