diff --git a/Terminal.Gui/App/CWP/CWPPropertyHelper.cs b/Terminal.Gui/App/CWP/CWPPropertyHelper.cs
index cfe7d68a0..2ea94ce97 100644
--- a/Terminal.Gui/App/CWP/CWPPropertyHelper.cs
+++ b/Terminal.Gui/App/CWP/CWPPropertyHelper.cs
@@ -22,7 +22,10 @@ public static class CWPPropertyHelper
/// The type of the property value, which may be a nullable reference type (e.g.,
/// ?).
///
- /// The current property value, which may be null for nullable types.
+ ///
+ /// Reference to the current property value, which may be null for nullable types. If the change is not cancelled, this
+ /// will be set to .
+ ///
/// The proposed new property value, which may be null for nullable types.
/// The virtual method invoked before the change, returning true to cancel.
/// The pre-change event raised to allow modification or cancellation.
@@ -52,9 +55,9 @@ public static class CWPPropertyHelper
///
///
public static bool ChangeProperty (
- T currentValue,
+ ref T currentValue,
T newValue,
- Func, bool> onChanging,
+ Func, bool>? onChanging,
EventHandler>? changingEvent,
Action doWork,
Action>? onChanged,
@@ -70,13 +73,17 @@ public static class CWPPropertyHelper
}
ValueChangingEventArgs args = new (currentValue, newValue);
- bool cancelled = onChanging (args) || args.Handled;
- if (cancelled)
+ if (onChanging is { })
{
- finalValue = currentValue;
+ bool cancelled = onChanging (args) || args.Handled;
- return false;
+ if (cancelled)
+ {
+ finalValue = currentValue;
+
+ return false;
+ }
}
changingEvent?.Invoke (null, args);
@@ -100,6 +107,7 @@ public static class CWPPropertyHelper
doWork (finalValue);
ValueChangedEventArgs changedArgs = new (currentValue, finalValue);
+ currentValue = finalValue;
onChanged?.Invoke (changedArgs);
changedEvent?.Invoke (null, changedArgs);