【发布时间】:2011-09-14 16:35:31
【问题描述】:
我在 C# 中有一个业务对象,它实现了 INotifyPropertyChanged 并包含几个绑定属性。简而言之,它看起来像这样:
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 的设置器中看到的那样,当 IntProperty 设置为 > 10 时,我设置 BoolProperty = false。BoolProperty 绑定到我的 UI(winforms)中的 CheckBox,但即使我设置 BoolProperty = false,CheckBox 不会更新以反映该更改,直到绑定到 IntProperty 的控件失去焦点。我想也许我需要在设置 BoolProperty = false 后调用 OnPropertyChanged 但这似乎没有什么不同。这是这种情况下的预期行为吗?如果是这样,是否有可能实现我所描述的行为?
【问题讨论】:
-
你绑定的 DataSourceUpdateMode 是什么,应该是 DataSourceUpdateMode.OnPropertyChanged。
-
你说的完全正确。我已经使用设计器创建了所有绑定,并通过单击相应的属性来设置它们。因此,如果您不使用设计器中的“高级”DataBindings 对话框或在代码中设置绑定并指定它,我假设 DataSourceUpdateMode.OnValidation 是默认设置?无论如何,非常感谢您的快速回复。如果您想用此信息“回答”我的问题,我很乐意接受并为您投票。再次感谢您!
标签: c# winforms data-binding controls