如果其中一个TextBox值发生变化,如何绑定多个保存数值的WPF TextBox来更改相同的绝对量?
假设我有上述用户界面。如果未选中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值更新或向下更新相同的相对量。 例如,如果第二个TextBox值从25更新 - > 30.其他4个TextBox值应该变为39,26,30和32(增加5)。
答案 0 :(得分: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中有干预,查询UseRelative值是否为true。如果是,则setter调用UpdateRelative方法并返回。
UpdateRelative方法在支持字段上运行,一旦执行计算,它就会在 public 字段上调用OnPropertyChanged。然后,WPF绑定引擎将查询getter并更新视图(因为getter使用支持字段)。
当UseRelative为false时,它正常运行:即标准WPF属性模型。可以使用相同的技术将此示例中的两个属性扩展为包含问题中的5个。