我有两个用于十进制输入的文本框。文本框中值的总和应等于Form的属性十进制值。
我尝试将两个MultiBindings与MultiValueConverter一起使用,如下所示:
XAML:
<TextBox x:Name="textBox1" ...>
<TextBox.Text>
<MultiBinding Converter="{StaticResource complementaryConverter}" Mode="OneWay">
<Binding ElementName="textBox2" Path="Text" />
<Binding Path="TotalValue" />
</MultiBinding>
</TextBox.Text>
</TextBox>
<TextBox x:Name="textBox2" ...>
<TextBox.Text>
<MultiBinding Converter="{StaticResource complementaryConverter}" Mode="OneWay">
<Binding ElementName="textBox1" Path="Text" />
<Binding Path="TotalValue" />
</MultiBinding>
</TextBox.Text>
</TextBox>
其中TotalValue是Form的属性,而complementaryConverter转换器是:
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
decimal result = (decimal)values[1] - (decimal)values[0];
return result.ToString();
}
这不起作用,因为我应该将其中一个文本框初始设置为等于总值,将另一个设置为零。理想情况下,我希望转换器生成互补的和文本框的值绑定到两个Form的十进制属性。我尝试了很多可能性但是我已经陷入这个愚蠢的问题几天了,所以任何帮助都会很明显。
答案 0 :(得分:0)
我认为您通过将TextBoxes直接绑定到彼此来选择了错误的方法。相反,您应该在viewmodel(或者您说的Form)上公开两个依赖项属性,每个框一个。您可以绑定到XAML中的那些,并在这些属性的setter中包含用于更改另一个值的逻辑。
以下是其中一个属性的草稿:
public static readonly DependencyProperty Text1Property =
DependencyProperty.Register("Text1", typeof(decimal), typeof(Form),
new PropertyMetadata(default(decimal)));
public decimal Text1
{
get { return (decimal)GetValue(Text1Property); }
set
{
SetValue(Text1Property, value);
SetValue(Text2Property, TotalValue - value);
}
}