使用Decimal时抛出异常?类型

时间:2015-04-10 10:53:00

标签: c# wpf exception data-binding

在我的场景中我需要绑定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:

由于

2 个答案:

答案 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}}"/>