我有一个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,但数据表单仍然绑定到原来的数据表单上,这个数据表没有被更改。
当我空数据表单实际绑定的对象的字段时,一切工作正常。
对不起,大家,分心,并感谢您的帮助。
一点建议 - 当发生的事情看起来没有意义时,可能发生的事情并不是你想象的那样。
您的公共MyProperty不可为空,它是一个正常的双倍。 – slugster
对不起,这是我将代码复制到SO时创建的错字。我的代码中的属性是可空的。最初输入的代码不会编译。我写的代码,属性和后台都可以为空,显示我所抱怨的行为。 –
你可以显示'onPropertyChanged'的代码吗? –