我有一个numericupdown,它的'Value'属性绑定到一个对象的属性(当然是Decimal)。对象的类实现INotifyPropertyChanged,当属性更改其值时引发propertychanged事件,绑定设置为updatemode.OnPropertyChanged。
private System.Windows.Forms.BindingSource myClassbindingSource;
在我的表格的OnLoad中,我有以下内容:
myClassbindingSource.Add( MyObject1 ); //(MyObject1 is an instance of MyClass)
base.OnLoad( e );
自动生成的绑定(在我将其DataBinding的高级属性'数据源更新模式'更改为'OnPropertyChanged'之后):
this.NumericUpDown1.DataBindings.Add(new System.Windows.Forms.Binding(
"Value", this.myClassBindingSource, "MyProperty", true,
System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
我的班级:
public class MyClass : INotifyPropertyChanged {
private Decimal myValue;
public Decimal MyProperty{
get { return myvalue; }
set {
myvalue = value;
NotifyPropertyChanged( "MyProperty" );
}
...
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged( String info ) {
var pceHandler = PropertyChanged;
var pceArgs = new PropertyChangedEventArgs( info );
if( pceHandler != null )
pceHandler( this, pceArgs );
}
}
现在,当对象的属性从代码的其他部分更改时,NumericUpdown不会显示其新值。
当我调试代码时,我可以看到,当属性发生更改时,PropertyChanged事件将触发,我的NUD的“Value”属性会获得正确的值,但“Text”属性的默认值为“0.000”。
还有其他控件可以使绑定正常工作,例如复选框与布尔,标签与字符串。但不是我的NUD绑定了十进制。
如何在'Value'属性中更新'Text'属性,以便显示正确的值? 或者更确切地说,为什么'Text'属性不会更新? 是否有属性可以控制如何处理它?</ p>