【问题标题】:Setting value of a bound property from the setter of another bound property从另一个绑定属性的设置器设置绑定属性的值
【发布时间】: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


【解决方案1】:

您可能需要将绑定的DataSourceUpdateMode 设置为DataSourceUpdateMode.OnPropertyChanged

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多