【问题标题】:How do you set a Nullable Dependency Property to Null?如何将 Nullable 依赖属性设置为 Null?
【发布时间】:2019-10-02 12:09:31
【问题描述】:

所以我认为这很简单,但显然将依赖属性设置为 null 会导致异常。

    public int? Value
    {
        get => (int?)GetValue(ValueProperty);
        set {SetValue(ValueProperty, value); }
    }

    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(object), typeof(MyClass), new PropertyMetadata(default(int?), new PropertyChangedCallback(OnValueChanged)));

当使用上述代码并使用 valuenull 调用 Value 设置器时,我得到以下异常

System.InvalidOperationException: 'Nullable object must have a value.'

这完全没有意义。如果它是Nullable object,那么根据定义,我应该可以将其设置为空。

所以我的问题是,有没有办法让依赖属性具有可空类型,同时还能够将其设置为空?

【问题讨论】:

  • 我无法重现您的问题。请提供更多详细信息。
  • 您是否在任何地方(绑定或 OnValueChanged)使用 Value.Value 访问您的值?

标签: c# dependency-properties nullable


【解决方案1】:

注册依赖属性时应将typeof(object)替换为typeof(int?)

public static readonly DependencyProperty ValueProperty = 
    DependencyProperty.Register("Value", typeof(int?), typeof(MyClass), new PropertyMetadata(default(int?), new PropertyChangedCallback(OnValueChanged)));

int? 属性设置为nulldefault(int?) 应该可以工作。

【讨论】:

  • 这并不能解决问题。相同的例外,相同的位置
  • @AnthonyRussell:请告诉我们你是如何以及在哪里得到异常的。
  • 我做了,它在上面的代码中。当该依赖属性设置为 null 时,我得到了这个异常
  • 不,当值设置为null时
  • @AnthonyRussell:您在何时何地将Value 设置为null?请提供代码 sn-p。并告诉我们您使用的是什么 XAML 框架。
猜你喜欢
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
相关资源
最近更新 更多