我正在尝试编写一个Value转换器,用于将WPF ToggleButton的布尔IsChecked属性绑定到我的模型中的非布尔值(恰好是一个double)。我写的转换函数看起来像这样:
public object Convert(object value, Type targetType, object paramter, System.Globalization.CultureInfo culutre)
{
if (targetType != typeof(Boolean))
throw new InvalidOperationException("Target type should be Boolean");
var input = double.Parse(value.ToString());
return (input==0.0) ? false: true;
}
问题在于,当调用funcion时,targetType不是我所期望的 - 它是
"System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
而不是System.Boolean。这是预期的吗?我过去写过其他转换器并没有麻烦。
答案 0 :(得分:4)
是的,因为ToggleButton(想到一个复选框)可以处于三种状态:Checked,Unchecked和Neither(复选框将显示为灰色)。
ToggleButton Class
Base class for controls that can switch states, such as CheckBox.
Property Value
Type: System.Nullable<Boolean>
true if the ToggleButton is checked; false if the ToggleButton is unchecked; otherwise null. The default is false.
因此,如果您投放到bool?
或Nullable,则可以使用.HasValue
和.Value
轻松获取值。
答案 1 :(得分:3)
这是预期的; IsChecked
是bool?
,而非bool
。将第一行更改为:
if (targetType != typeof(bool?))
答案 2 :(得分:2)
是的,IsChecked是一个'nullable'布尔值...意思是它可能是true,false或null。这里很少有一个带空值的切换按钮,但在某些子类如CheckBox上更常见。
答案 3 :(得分:2)
IsChecked是一个可以为空的布尔值。因此,请检查Boolean
bool?