我有一个Telerik RadDataForm,其中包含几个绑定到可空属性的DataFormDataField:
<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并再次清除控件。不幸的是,当我将属性设置为null时,控件不会更改并继续包含先前的值。
有关如何实现这一目标的任何想法?
=== ADDENDUM ===
为了澄清这是Telerik的RadNumericUpDown控件或基本WPF绑定中的问题,我将其替换为来自Alex Titarenko WPFControls的IntegerUpDown:
<telerik:DataFormDataField>
<xctk:IntegerUpDown Value="{KtWpf:IntegerBinding Path=mileageend}" />
</telerik:DataFormDataField>
我看到了完全相同的行为。
=== OOPS ===
好的,问题与绑定无关。隐藏在支持包含此数据表单的控件的视图模型的代码中,我们新建了绑定数据表单的对象。
发生的事情是,在我们开始将这些字段设置为new的代码之前,我们新建了一个新对象并指向视图模型对它的引用。因此,当我在调试器中浏览时,我正在查看一个对象,并将其字段设置为null,但数据表单仍然绑定到原始文件,但未更改。
当我将数据表单实际绑定的对象的字段置空时,一切正常。
对不起,大家,为了分心,感谢您的帮助。
一点建议 - 当发生的事情似乎毫无意义时,可能发生的事情并非你认为的情况。
答案 0 :(得分: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