0

我有两个用于十进制输入的文本框。文本框中的值的总和应等于表单的属性十进制值。

我尝试将两个 MultiBindings 与 MultiValueConverter 一起使用,如下所示:

xml:

    <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 的小数属性。我尝试了很多可能性,但我已经被这个愚蠢的问题困住了几天,所以任何帮助都是显而易见的。

4

1 回答 1

0

我认为您通过将 TextBoxes 直接相互绑定来选择错误的方法。相反,您应该在视图模型(或您所说的 Form)上公开两个依赖属性,每个框一个。您可以绑定到 XAML 中的那些,并在这些属性的设置器中包含用于更改其他值的逻辑。

这是其中一个属性的草稿:

    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);
        }
    }
于 2013-07-28T01:08:52.143 回答