diff --git a/Prowl.Runtime/Serializer/SerializedProperty.cs b/Prowl.Runtime/Serializer/SerializedProperty.cs index 3d60f6007..7ca775100 100644 --- a/Prowl.Runtime/Serializer/SerializedProperty.cs +++ b/Prowl.Runtime/Serializer/SerializedProperty.cs @@ -25,8 +25,24 @@ public enum PropertyType Compound, } + public class PropertyChangeEventArgs : EventArgs + { + public SerializedProperty Property { get; } + public object? OldValue { get; } + public object? NewValue { get; } + + public PropertyChangeEventArgs(SerializedProperty property, object? oldValue, object? newValue) + { + Property = property; + OldValue = oldValue; + NewValue = newValue; + } + } + public sealed partial class SerializedProperty { + public event EventHandler? PropertyChanged; + private object? _value; public object? Value { get { return _value; } private set { Set(value); } } @@ -90,6 +106,12 @@ public SerializedProperty Clone() return new(TagType, Value); } + private void OnPropertyChanged(PropertyChangeEventArgs e) + { + PropertyChanged?.Invoke(this, e); + Parent?.OnPropertyChanged(e); + } + #region Shortcuts /// @@ -145,6 +167,8 @@ public void Set(object value) PropertyType.Bool => (bool)value, _ => throw new InvalidOperationException("Cannot set value of " + TagType.ToString()) }; + + OnPropertyChanged(new PropertyChangeEventArgs(this, old, value)); } /// Returns the value of this tag, cast as a bool.