使用 Decimal 时抛出异常?类型

CastException while using Decimal? type

在我的场景中我需要绑定 Decimal?输入 属性 加倍?输入 属性.

这是使用 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 occurred _HResult=-2147467262
_message=Null object cannot be converted to a value type. HResult=-2147467262 IsTransient=false Message=Null object cannot be converted to a value type. Source=mscorlib StackTrace: at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) InnerException:

谢谢

添加命名空间xmlns:sys="clr-namespace:System;assembly=mscorlib"

并使用这个:

<TextBox x:Name="db" Width="100"  Height="{Binding ID, TargetNullValue={x:Static sys:String.Empty}}"/>

所以,原因是异常中写的:

Null object cannot be converted to a value type

当它试图从您的小数中生成双精度值(对于 "Height" 属性)时,转换方法 ("System.Convert.ChangeType") 不知道如何处理空(可用)值。由于当 属性 ("double?") 的类型和绑定 属性 ("ID") 的类型相同时,永远不会调用此方法,因此您永远不会遇到此错误你原来的环境。