1

如果 TextBox 值之一发生更改,如何绑定多个持有数值的 WPF 文本框以更改相同的绝对量?

多个文本框

可以说我有上面的用户界面。如果未选中 CheckBox,我需要定期绑定到 ViewModel 属性(这就是我现在拥有的):

<TextBox Text="{Binding Value1}" />
<TextBox Text="{Binding Value2}" />
<TextBox Text="{Binding Value3}" />
<TextBox Text="{Binding Value4}" />
<TextBox Text="{Binding Value5}" />
<CheckBox Content="Relative Changes Constant" IsChecked="{Binding UseRelative}" />

但是,如果选中 CheckBox 并且更改了任何 TextBox 中的值,则我需要将所有其他 TextBox 值更新为相同的相对量。例如,如果第 2 个 TextBox 值从 25 -> 30 更新。那么其他 4 个 TextBox 值应变为 39、26、30 和 32(增加 5)。

4

1 回答 1

0

这是一个仅使用两个属性的解决方案...

  private int _value1;
    public int Value1
    {
        [DebuggerStepThrough]
        get { return _value1; }
        [DebuggerStepThrough]
        set
        {
            if (value != _value1)
            {
                if (UseRelative)
                {
                    UpdateRelative(value - _value1);
                }
                else
                {
                    _value1 = value;
                    OnPropertyChanged("Value1");
                }
            }
        }
    }
    private int _value2;
    public int Value2
    {
        [DebuggerStepThrough]
        get { return _value2; }
        [DebuggerStepThrough]
        set
        {
            if (value != _value2)
            {
                if (UseRelative)
                {
                    UpdateRelative(value - _value2)
                }
                else
                {
                    _value2 = value;
                    OnPropertyChanged("Value2");
                }
            }
        }
    }
    private void UpdateRelative(int increment)
    {
        _value1 += increment;
        _value2 += increment;
        // update the view
        OnPropertyChanged("Value1");
        OnPropertyChanged("Value2");
    }

在这个例子中,在设置支持字段之前,setter 中有一个干预,它查询 UserRelative 值是否为真。如果是,setter 调用 UpdateRelative 方法并返回。

UpdateRelative 方法对支持字段进行操作,一旦执行计算,它就会在公共字段上调用 ​​OnPropertyChanged。然后 WPF 绑定引擎将查询 getter 并更新视图(因为 getter 使用支持字段)。

当 UseRelative 为 false 时,一切照旧:即标准的 WPF 属性模型。可以使用相同的技术扩展此示例中的两个属性以将 5 包含在您的问题中。

于 2013-08-12T21:51:38.930 回答