我有一种情况,我正在使用多值转换器。传递给它的值本身正在被转换。
<MenuItem>
<MenuItem.IsEnabled>
<MultiBinding Converter="{StaticResource BooleanAndConverter}">
<Binding Path="Prop1" Converter="{StaticResource Converter1}" />
<Binding Path="Prop2" Converter="{StaticResource Converter1}" />
</MultiBinding>
</MenuItem.IsEnabled>
</MenuItem
Converter1 包含一些错误检查,以确认使用有效的目标类型调用它。如果没有,它会抛出异常,因为这是开发人员错误,应该修复这种情况。
问题是当在此上下文中使用 Converter1 时,目标类型是 System.Object。现在 BooleanAndConverter 需要某种类型(布尔)的值,那么我怎样才能将该类型作为 Converter1 的目标类型传递呢?
这里要求的是 BooleanAndConverter 代码:
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
foreach (object value in values)
{
if (value.GetType() != typeof(bool))
{
throw new ArgumentException("BooleanAndConverter can only be used to convert booleans."); // developer error
}
}
if (targetType != typeof(bool))
{
throw new ArgumentException("BooleanAndConverter can only convert to a boolean."); // developer error
}
foreach (object value in values)
{
if ((bool)value == false)
{
return false;
}
}
return true;
}
让我重申这个问题,因为似乎有些混乱。Converter1 知道它可以从什么类型转换到什么类型。当使用错误的类型调用时,它会引发异常。在这种情况下,未指定 targetType 并引发异常。如何正确指定 targetType?在多绑定情况下不使用时,总是会根据正在转换的内容正确指定。