在我的场景中我需要绑定Decimal?类型属性为Double?类型属性。
以下是使用Double的简单代码?
public class Model
{
private double? id = null;
public double? ID
{
get { return id; }
set { id = value; }
}
}
和我的Xaml
<TextBox x:Name="db" Width="100" Height="{Binding Path=ID}" />
这没有任何问题, 但如果我将ID的类型更改为十进制?等,
public class Model
{
private decimal? id = null;
public decimal? ID
{
get { return id; }
set { id = value; }
}
}
它抛出异常(需要启用VS中的所有异常)。这种行为背后有什么具体原因吗?
异常详情:
发生了System.InvalidCastException _HResult = -2147467262
_message =无法将空对象转换为值类型。 HResult = -2147467262 IsTransient = false Message = Null对象不能 转换为值类型。 Source = mscorlib StackTrace: at System.Convert.ChangeType(Object value,Type conversionType,IFormatProvider provider)InnerException:
由于
答案 0 :(得分:1)
所以,原因是在例外中写了什么:
无法将空对象转换为值类型
当它尝试在小数点之外创建一个double值(对于&#34; Height&#34;属性)时,转换方法(&#34; System.Convert.ChangeType&#34;)不知道如何处理null(有能力)值。由于当属性的类型(&#34; double?&#34;)和绑定属性(&#34; ID&#34;)属于同一类型时,永远不会调用此方法,因此您永远不会遇到此错误你原来的环境。
答案 1 :(得分:0)
添加名称空间xmlns:sys="clr-namespace:System;assembly=mscorlib"
并使用此:
<TextBox x:Name="db" Width="100" Height="{Binding ID, TargetNullValue={x:Static sys:String.Empty}}"/>