2016-08-05 148 views
0

我有一个Telerik的RadDataForm,与一对夫妇DataFormDataField年代绑定到空的属性:在ViewModel中将属性设置为null?

<telerik:DataFormDataField Label="My Property"> 
    <telerik:RadNumericUpDown Value="{Binding Path=MyProperty}" /> 
</telerik:DataFormDataField> 

和:

private double? myProperty; 
public double? MyProperty 
{ 
    get { return this.myProperty; } 
    set 
    { 
     this.myProperty = value; 
     this.onPropertyChanged(nameof(this.MyProperty)); 
    } 
} 

和:

public event PropertyChangedEventHandler PropertyChanged; 

private void onPropertyChanged(string propertyName) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

加载窗体时,该属性为空,所以控件是空的。如果用户键入或使用控件将数字放入属性,控件将显示该值,并将该属性设置为正确的值。

我需要能够将代码中的属性重置为null并让控件再次被清除。不幸的是,当我将该属性设置为null时,控件不会更改并继续包含先前的值。

任何想法如何做到这一点?

===附录===

为了澄清这是否是在Telerik的RadNumericUpDown控制的问题,或在基础WPF结合,我IntegerUpDown取代它从亚历克斯·季塔连科的WPFControls

<telerik:DataFormDataField> 
    <xctk:IntegerUpDown Value="{KtWpf:IntegerBinding Path=mileageend}" /> 
</telerik:DataFormDataField> 

我看到完全一样的行为。

=== OOPS ===

OK,这个问题无关,与结合。埋在支持包含此数据表单的控件的视图模型的代码中,我们将新建数据表单所绑定的对象。

发生了什么事情是,在我们找到将这些字段设置为new的代码之前,我们会新建一个新对象并指向视图模型对它的引用。所以当我在调试器中走过时,我正在查看一个对象,并将它的字段设置为null,但数据表单仍然绑定到原来的数据表单上,这个数据表没有被更改。

当我空数据表单实际绑定的对象的字段时,一切工作正常。

对不起,大家,分心,并感谢您的帮助。

一点建议 - 当发生的事情看起来没有意义时,可能发生的事情并不是你想象的那样。

+4

您的公共MyProperty不可为空,它是一个正常的双倍。 – slugster

+0

对不起,这是我将代码复制到SO时创建的错字。我的代码中的属性是可空的。最初输入的代码不会编译。我写的代码,属性和后台都可以为空,显示我所抱怨的行为。 –

+0

你可以显示'onPropertyChanged'的代码吗? –

回答

1

变量和属性必须是可空

private double? myProperty; 
public double? MyProperty 
{ 
    get { return this.myProperty; } 
    set 
    { 
     this.myProperty = value; 
     this.onPropertyChanged(nameof(this.MyProperty)); 
    } 
} 

问题可空属性的是,你有当你把值转换成其他双

double d = (double)MyProperty; 

编辑丢掉。

若要检查对象或DependencyProperty是否为nullable请参阅this question

+0

对不起,这是我将代码复制到SO时创建的错字。我的代码中的属性是可空的。 –

相关问题