mvvm在其他文本框上添加两个文本框插入值

时间:2014-12-21 06:11:46

标签: c# wpf mvvm

大家好,我有一个问题,我必须添加两个文本框浮动,并将结果放在另一个文本框中而不使用代码隐藏两个文本框绑定到它们的属性。提前感谢大家的帮助

3 个答案:

答案 0 :(得分:1)

您的视图模型将包含三个属性。前两个属性将双向绑定到输入文本框。第三个属性将返回第一个和第二个属性的总和,并将其绑定到仅用于输出的第三个文本框。

当您编辑第一个或第二个属性时,他们也会通知third property changed

public class ViewModel
{
    private string _firstText;
    public string FirstText 
    {
        get  {return _firstText; } 
        set { _firstText = value; RaisePropertyChanged("FirstAndSecondText"); }
    }

    private string _secondText;
    public string SecondTExt
    {
        get  {return _secondText; } 
        set { _secondText= value; RaisePropertyChanged("FirstAndSecondText"); }
    }

    public string FirstAndSecondText {get {return FirstText + SecondText; }}
}

在xaml:

<TextBox Text={Binding FirstText, Mode=TwoWay} />
<TextBox Text={Binding SecondText, Mode=TwoWay} />
<TextBox Text={Binding FirstAndSecondText} />

RaisePropertyChanged不是内置方法。您必须实现INotificationProperty接口或在MVVM Light工具包中继承一个特殊的帮助器类,如ViewModelBase

答案 1 :(得分:1)

这里该怎么做: 首先在视图模型中定义三个浮动属性:

 private float _floatOne;
    public float FloatOne
    {
        get
        {
            return _floatOne;
        }

        set
        {
            if (_floatOne == value)
            {
                return;
            }

            _floatOne = value;
            OnPropertyChanged();
            Result = _floatOne + _floatTwo;
        }
    }
    private float _floatTwo;
    public float FloatTwo
    {
        get
        {
            return _floatTwo;
        }

        set
        {
            if (_floatTwo == value)
            {
                return;
            }

            _floatTwo = value;
            OnPropertyChanged();
            Result = _floatOne + _floatTwo;
        }
    }



    private float _result;
    public float Result
    {
        get
        {
            return _result;
        }

        set
        {
            if (_result == value)
            {
                return;
            }

            _result = value;
            OnPropertyChanged();
        }
    }

OnPropertyChanged方法将通知UI任何更改,这是实现INotifyPropertyChanged接口的结果, 其次在您的Xaml中将这些属性绑定到textBoxes,如下所示:

<StackPanel>
     <TextBox Text="{Binding FloatOne,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
     <TextBox Text="{Binding FloatTwo,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
     <TextBox Text="{Binding Result,Mode=OneWay}" IsReadOnly="True"/>
 </StackPanel>

答案 2 :(得分:0)

感谢您帮助我:

public double Ricambi
{
    get { return _Ricambi; }
    set
    {
        _Ricambi = value; _Totale = _Ricambi + _Manifattura; RaisePropertyChanged("Ricambi"); RaisePropertyChanged("Totale");
    }
}

public double Manifattura
{
    get { return _Manifattura;  }
    set { _Manifattura = value;_Totale = _Ricambi + _Manifattura; RaisePropertyChanged("Manifattura"); RaisePropertyChanged("Totale"); }
}

public double Totale
{   
    get { return _Totale; }
}