在WPF中用数学运算绑定

时间:2014-08-13 13:06:50

标签: wpf xaml data-binding

我有三个TextBox es:WBC_txtNE_txtresult_txt

我想用绑定来执行此操作:

(WBC_txt.text * NE_txt.text) * 10

并在result_txt.Text显示结果。

我尝试过ElementNamePath方式,但它不起作用,因为它只提供一个值。

使用XAML进行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

创建三个属性是Viewmodel,两个属性通过数据绑定表示WBC_txtNE_txt的内容,第三个属性返回计算结果:

private double _wbc;
public double Wbc
{
    get { return _wbc; }
    set
    {
        if (value != _wbc)
        {
            _wbc = value;
            NotifyPropertyChanged("Wbc");
            NotifyPropertyChanged("Result");
        }
    }
}

private double _ne;
public double Ne
{
    get { return _ne; }
    set
    {
        if (value != _ne)
        {
            _ne = value;
            NotifyPropertyChanged("Ne");
            NotifyPropertyChanged("Result");
        }
    }
}

public double Result
{
    get { return Wbc * Ne * 10; }
}

然后将第三个属性Result绑定到result_txt文本框!

答案 1 :(得分:2)

在ViewModel中放置显式属性Result的另一个选择是制作Multiconverter

如果您没有在ViewModel中的任何其他地方引用结果,这可能是最好的方法,因为它将允许您重复使用此数学运算&不用担心结果的属性正在更新。

这看起来像

<强> XAML

<TextBox x:Name="Result">
    <TextBox.Text>
        // OneWay binding necessary in this case otherwise it will 
        // try calling ConvertBack which is NotSupported
        <Multibinding Converter="{StaticResource WPCandNEtoResultConverter}" Mode="OneWay">
            <Binding Path="Wbc">
            <Binding Path="Ne">
        </Multibinding>
    </TextBox.Text>
</TextBox>

C#IMultiValueConverter

public class WPCandNEtoResultConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType,
        object parameter, CultureInfo culture)
    {
        var wbc = values[0];
        var ne = values[1];

        return return wbc * ne * 10;
    }

    public object[] ConvertBack(object value, Type[] targetTypes,
        object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}