From 2719b3e30d69b834a3806f9ba3a9e801d7540f67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20S=CC=8Colte=CC=81s?= Date: Sun, 26 Jan 2025 19:14:46 +0100 Subject: [PATCH] Use OnPropertyChanged --- .../Core/BindingTriggerBehavior.cs | 22 +++++------- .../Focus/FocusControlBehavior.cs | 36 +++++++++---------- .../Core/EventTriggerBehavior.cs | 26 ++++++++------ 3 files changed, 41 insertions(+), 43 deletions(-) diff --git a/src/Avalonia.Xaml.Interactions.Custom/Core/BindingTriggerBehavior.cs b/src/Avalonia.Xaml.Interactions.Custom/Core/BindingTriggerBehavior.cs index 6bfddb26..b4fe1c5e 100644 --- a/src/Avalonia.Xaml.Interactions.Custom/Core/BindingTriggerBehavior.cs +++ b/src/Avalonia.Xaml.Interactions.Custom/Core/BindingTriggerBehavior.cs @@ -1,7 +1,6 @@ using System; using System.Diagnostics.CodeAnalysis; using Avalonia.Data; -using Avalonia.Reactive; using Avalonia.Threading; using Avalonia.Xaml.Interactivity; @@ -69,23 +68,18 @@ private object? BindingValue get => GetValue(BindingValueProperty); set => SetValue(BindingValueProperty, value); } - - static BindingTriggerBehavior() - { - ComparisonConditionProperty.Changed.Subscribe( - new AnonymousObserver>(OnValueChanged)); - - ValueProperty.Changed.Subscribe( - new AnonymousObserver>(OnValueChanged)); - - BindingValueProperty.Changed.Subscribe( - new AnonymousObserver>(OnValueChanged)); - } /// protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { base.OnPropertyChanged(change); + + if (change.Property == ComparisonConditionProperty || + change.Property == ValueProperty || + change.Property == BindingValueProperty) + { + OnValueChanged(change); + } if (change.Property == BindingProperty) { @@ -115,7 +109,7 @@ protected override void OnInitializedEvent() Execute(parameter: null); } - private static void OnValueChanged(AvaloniaPropertyChangedEventArgs args) + private void OnValueChanged(AvaloniaPropertyChangedEventArgs args) { if (args.Sender is not BindingTriggerBehavior behavior) { diff --git a/src/Avalonia.Xaml.Interactions.Custom/Focus/FocusControlBehavior.cs b/src/Avalonia.Xaml.Interactions.Custom/Focus/FocusControlBehavior.cs index 31107562..16f44d32 100644 --- a/src/Avalonia.Xaml.Interactions.Custom/Focus/FocusControlBehavior.cs +++ b/src/Avalonia.Xaml.Interactions.Custom/Focus/FocusControlBehavior.cs @@ -1,6 +1,5 @@ using System.Reactive.Disposables; using Avalonia.Controls; -using Avalonia.Reactive; using Avalonia.Threading; namespace Avalonia.Xaml.Interactions.Custom; @@ -25,25 +24,19 @@ public bool FocusFlag set => SetValue(FocusFlagProperty, value); } - /// - /// - /// - /// - protected override void OnAttached(CompositeDisposable disposables) + /// + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { - base.OnAttached(disposables); + base.OnPropertyChanged(change); - var disposable = this.GetObservable(FocusFlagProperty) - .Subscribe(new AnonymousObserver( - focusFlag => - { - if (focusFlag && IsEnabled) - { - Dispatcher.UIThread.Post(() => AssociatedObject?.Focus()); - } - })); - - disposables.Add(disposable); + if (change.Property == FocusFlagProperty) + { + var focusFlag = change.GetNewValue(); + if (focusFlag && IsEnabled) + { + Execute(); + } + } } /// @@ -54,7 +47,12 @@ protected override void OnAttachedToVisualTree(CompositeDisposable disposable) { if (FocusFlag && IsEnabled) { - Dispatcher.UIThread.Post(() => AssociatedObject?.Focus()); + Execute(); } } + + private void Execute() + { + Dispatcher.UIThread.Post(() => AssociatedObject?.Focus()); + } } diff --git a/src/Avalonia.Xaml.Interactions/Core/EventTriggerBehavior.cs b/src/Avalonia.Xaml.Interactions/Core/EventTriggerBehavior.cs index 0a42e886..1f55ca53 100644 --- a/src/Avalonia.Xaml.Interactions/Core/EventTriggerBehavior.cs +++ b/src/Avalonia.Xaml.Interactions/Core/EventTriggerBehavior.cs @@ -52,17 +52,23 @@ public object? SourceObject set => SetValue(SourceObjectProperty, value); } - static EventTriggerBehavior() + /// + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { - EventNameProperty.Changed.Subscribe( - new AnonymousObserver>(EventNameChanged)); - - SourceObjectProperty.Changed.Subscribe( - new AnonymousObserver>(SourceObjectChanged)); + base.OnPropertyChanged(change); + + if (change.Property == EventNameProperty) + { + EventNameChanged(change); + } + else if (change.Property == SourceObjectProperty) + { + SourceObjectChanged(change); + } } [RequiresUnreferencedCode("This functionality is not compatible with trimming.")] - private static void EventNameChanged(AvaloniaPropertyChangedEventArgs e) + private void EventNameChanged(AvaloniaPropertyChangedEventArgs e) { if (e.Sender is not EventTriggerBehavior behavior) { @@ -74,8 +80,8 @@ private static void EventNameChanged(AvaloniaPropertyChangedEventArgs e return; } - var oldEventName = e.OldValue.GetValueOrDefault(); - var newEventName = e.NewValue.GetValueOrDefault(); + var oldEventName = e.GetOldValue(); + var newEventName = e.GetNewValue(); if (oldEventName is not null) { @@ -88,7 +94,7 @@ private static void EventNameChanged(AvaloniaPropertyChangedEventArgs e } } - private static void SourceObjectChanged(AvaloniaPropertyChangedEventArgs e) + private void SourceObjectChanged(AvaloniaPropertyChangedEventArgs e) { if (e.Sender is EventTriggerBehavior behavior) {