diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs index e94c49f5e5..94342b8e3a 100644 --- a/src/Avalonia.Controls/TextBox.cs +++ b/src/Avalonia.Controls/TextBox.cs @@ -148,7 +148,8 @@ namespace Avalonia.Controls { value = CoerceCaretIndex(value); SetAndRaise(CaretIndexProperty, ref _caretIndex, value); - if (_undoRedoHelper.IsLastState && _undoRedoHelper.LastState?.Text == Text) + UndoRedoState state; + if (_undoRedoHelper.TryGetLastState(out state) && state.Text == Text) _undoRedoHelper.UpdateLastState(); } } diff --git a/src/Avalonia.Controls/Utils/UndoRedoHelper.cs b/src/Avalonia.Controls/Utils/UndoRedoHelper.cs index 4382d5c3cb..71ba3793d1 100644 --- a/src/Avalonia.Controls/Utils/UndoRedoHelper.cs +++ b/src/Avalonia.Controls/Utils/UndoRedoHelper.cs @@ -42,6 +42,17 @@ namespace Avalonia.Controls.Utils public bool IsLastState => _currentNode != null && _currentNode.Next == null; + public bool TryGetLastState(out TState _state) + { + _state = default(TState); + if (!IsLastState) + return false; + + _state = _currentNode.Value; + return true; + } + + public bool HasState => _currentNode != null; public void UpdateLastState(TState state) { _states.Last.Value = state; @@ -52,8 +63,6 @@ namespace Avalonia.Controls.Utils _states.Last.Value = _host.UndoRedoState; } - public TState? LastState => _currentNode?.Value; - public void DiscardRedo() { while (_currentNode?.Next != null)