两个值相加的文本框是互补的

时间:2013-07-27 22:20:09

标签: c# wpf

我有两个用于十进制输入的文本框。文本框中值的总和应等于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的十进制属性。我尝试了很多可能性但是我已经陷入这个愚蠢的问题几天了,所以任何帮助都会很明显。

1 个答案:

答案 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);
        }
    }