【发布时间】:2015-07-07 19:06:22
【问题描述】:
我有一种使用多值转换器的情况。传递给它的值本身正在被转换。
<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?在多绑定情况下不使用时,总是会根据正在转换的内容正确指定。
【问题讨论】:
-
它只是一个装箱的布尔值吗?你是否在调试器中查看过它以确定传入的对象的底层类型?
-
请发布 BooleanAndConverter 的代码。
-
@AbinMathew 我在问题中添加了转换函数。
-
"如何正确指定 targetType?"当 Converter1 用于 MultiBinding 中的 Binding 时,一点也不。没有目标属性,因此除了
object之外没有目标类型。 -
在 4.0 中由于某种原因从 .NET 3.5 发生了变化,请参阅 stackoverflow.com/questions/19086116/…
标签: c# wpf xaml ivalueconverter imultivalueconverter