2014-12-21 2 views
-1

Привет всем, у меня есть проблема, мне нужно добавить два текстовых поля и поместить результат в другое текстовое поле без использования кода, поскольку два текстовых поля привязаны к их свойству. Заранее благодарю вас за помощьmvvm добавить два значения вставки текстового поля в другое текстовое поле

+0

Где код, который вы внедрили? – Sajeetharan

ответ

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 или наследовать специальные вспомогательные классы, например ViewModelBase, в инструментах MVVM Light.

+0

спасибо всем вам за помощь – Nio74

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 уведомит интерфейс для каких-либо изменений, и это является результатом реализации интерфейса 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> 
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; } 
} 
+0

Лично я предпочитаю решение @JesseJames, потому что вы не повторяете свое определение того, что такое '_Totale'. С решением, которое вы выбрали, теперь у вас есть два места в коде для поддержки этой формулы. Да, это простая формула, но повторять это не очень хорошо. Решение JesseJames определило, что только в одном месте, поэтому, если это необходимо для изменения, вам не помешало определение, разбросанное по всему коду. Кстати, если эти ответы помогли вам, то Upvote их и выберите один в качестве выбранного ответа. – Mashton

Смежные вопросы