0
我在C#中有一个实现INotifyPropertyChanged并包含几个绑定属性的业务对象。简单地说,它看起来像这样:从另一个绑定属性的setter中设置绑定属性的值
public class BusinessObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
private int _intProperty;
public int IntProperty // bound to NumericUpDown control
{
get { return _intProperty; }
set
{
if (_intProperty == value)
{
return;
}
_intProperty = value;
OnPropertyChanged(new PropertyChangedEventArgs("IntProperty"));
// if IntProperty is > 10, then set BoolProperty to false
if (value > 10)
{
this.BoolProperty = false;
//OnPropertyChanged(new PropertyChangedEventArgs("BoolProperty"));
}
}
}
private bool _boolProperty;
public bool BoolProperty // bound to CheckBox
{
get { return _boolProperty; }
set
{
if (_boolProperty == value)
{
return;
}
_boolProperty = value;
OnPropertyChanged(new PropertyChangedEventArgs("BoolProperty"));
}
}
正如你可以在二传手的IntProperty看,我设置BoolProperty = false当IntProperty已经设置> 10. BoolProperty绑定到一个CheckBox我UI(winforms),但即使我设置BoolProperty = false,CheckBox不会更新以反映该更改,直到绑定到IntProperty的控件失去焦点。我想也许我需要在设置BoolProperty = false后调用OnPropertyChanged,但这似乎没有什么区别。这是这种情况下的预期行为吗?如果是这样,是否有可能实现我描述的行为?
什么是你的绑定DataSourceUpdateMode,应该DataSourceUpdateMode.OnPropertyChanged。 – stuartd
你绝对正确。我使用设计器创建了所有绑定,并通过单击相应的属性来设置它们。所以我假设DataSourceUpdateMode.OnValidation是默认的,如果你不在设计器中使用“高级”DataBindings对话框,或者在代码中设置绑定并指定它?无论如何,非常感谢您的快速回复。如果您想用此信息“回答”我的问题,我会很乐意接受并为您提供赞赏。再次感谢你! – user685869
会做,谢谢。 – stuartd