Так что я сейчас работаю над своим строковым калькулятором (академическое упражнение, я все еще изучаю), и я вложил много логики в код «За собой». Теперь моя задача - перенести эту логику в viewmodel. Я застрял прямо сейчас, я создал Свойства для 2 текстовых полей, которые у меня есть, и все, что я хочу, это для цифр/операторов, на которые я нажимаю, чтобы быть добавленными в строку текстового поля, по крайней мере на данный момент, мой калькулятор Engine сделает отдых. Но я не могу заполнить текстовые поля. Они должны начинаться с «0», и каждая кнопка, которую я нажимаю, должна добавить соответствующую цифру в текстовые поля, но сейчас она просто заменяет текущую или добавляет ее, но только в сочетании с «0». Надеюсь, я не слишком расплывчатый, и это не слишком много кода, я все еще учусь. При отладке я вижу, что значение LowerTextBox, после «LowerTextBox = character», где символ «8», например, LowerTextBox получает «08», почему?Строковый калькулятор в wpf, заполнить текстовые поля в ViewModel
class ViewModel : INotifyPropertyChanged
{
private bool _lastButtonEqual;
public ICommand StandardButtonCommand { get; set; }
public ICommand DigitsOnlyCommand { get; set; }
public ViewModel()
{
StandardButtonCommand = new RelayCommand<string>(Button_Click);
DigitsOnlyCommand = new RelayCommand<string>(OnlyDigitsInTextBox);
}
private string _upperTextBox;
public string UpperTextBox
{
get { return _upperTextBox = "0"; }
set
{
if (value == _upperTextBox) return;
_upperTextBox += value;
RaisePropertyChanged();
}
}
private string _lowerTextBox;
public string LowerTextBox
{
get { return _lowerTextBox = "0"; }
set
{
if (value == _lowerTextBox) return;
_lowerTextBox += value;
RaisePropertyChanged();
}
}
private void OnlyDigitsInTextBox(string character)
{
if (UpperTextBox.EndsWith("+") || UpperTextBox.EndsWith("-") || UpperTextBox.EndsWith("/") ||
UpperTextBox.EndsWith("*") || LowerTextBox == "0" || _lastButtonEqual)
{
LowerTextBox = character;
}
else
{
LowerTextBox += character;
}
if (UpperTextBox == "0")
{
UpperTextBox = character;
}
else
{
UpperTextBox = UpperTextBox + character;
}
_lastButtonEqual = false;
}
private void Button_Click(string digit)
{
OnlyDigitsInTextBox(digit);
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
В настройщике вашего «LowerTextBox» вы добавляете значение, которое вы устанавливаете ('_lowerTextBox + = значение'). Следовательно, значение добавляется вместо замены. –
Я изменил это в какой-то момент, потому что думал, что это может иметь смысл. Я изменил его, как вы сказали, но теперь ничего не происходит, когда я нажимаю кнопку «LowerTextBox», несмотря на строку «LowerTextBox = character»; сохраняет значение «0» в качестве значения. – tweedledum11