public CalculatorViewModel() { _storedResult = _currentNumber = 0; _currentOp = CurrentOperationEnum.NONE; _clearOnNextNumber = true; _lastOperationEquals = false; }
public void ProcessString(string input) { // first check for numbers int curNumber; if (int.TryParse(input, out curNumber)) { if (_clearOnNextNumber) { _currentNumber = 0; _clearOnNextNumber = false; } _currentNumber = _currentNumber * 10 + curNumber; } else if (input == "*") { _storedResult = _currentNumber; _currentNumber = 0; _currentOp = CurrentOperationEnum.MULTIPLY; } else if (input == "-") { _storedResult = _currentNumber; _currentNumber = 0; _currentOp = CurrentOperationEnum.SUBTRACT; } else if (input == "+") { _storedResult = _currentNumber + _storedResult; _currentNumber = 0; _currentOp = CurrentOperationEnum.ADD; } else if (input == "=" && _storedResult.HasValue) { double oldCurrent = _currentNumber; switch (_currentOp) { case CurrentOperationEnum.ADD: _currentNumber = _currentNumber + _storedResult.Value; break; case CurrentOperationEnum.MULTIPLY: _currentNumber = _currentNumber * _storedResult.Value; break; case CurrentOperationEnum.SUBTRACT: _currentNumber = _lastOperationEquals ? _currentNumber - _storedResult.Value : _storedResult.Value - _currentNumber; break; } if (!_lastOperationEquals) { _storedResult = oldCurrent; } _clearOnNextNumber = true; } else if (input == "C") { _storedResult = _currentNumber = 0; _currentOp = CurrentOperationEnum.NONE; } // record whether the last operation was an equals _lastOperationEquals = (input == "="); // Ensure that the 2 properties are updated in the UI RaisePropertyChanged("Output"); RaisePropertyChanged("OutputCharArray"); }