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

本文关键字:文本 两个 插入 添加 其他 MVVM | 更新日期: 2023-09-27 18:34:47

大家好,我有一个问题,我必须添加两个文本框浮点数,并将结果放在另一个文本框中,而无需使用代码隐藏两个文本框是 bindate 到他们的属性。提前感谢大家的帮助

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

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

当您编辑第一个或第二个属性时,它们也会通知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

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

 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 中将这些属性绑定到您的文本框中,如下所示:

<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>

感谢您对我的帮助:

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; }
}