From 0d53d641ea082e58c6e9863cd53105264a4a9e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wies=C5=82aw=20S=CC=8Colte=CC=81s?= Date: Sat, 4 Jan 2025 22:42:37 +0100 Subject: [PATCH] Add new custom reactive event behaviors --- .../Core/ActualThemeVariantChangedBehavior.cs | 31 +++++++++++++++++++ .../Core/DataContextChangedBehavior.cs | 31 +++++++++++++++++++ .../Core/InitializedBehavior.cs | 31 +++++++++++++++++++ .../Core/ResourcesChangedBehavior.cs | 31 +++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 src/Avalonia.Xaml.Interactions.Custom/Core/ActualThemeVariantChangedBehavior.cs create mode 100644 src/Avalonia.Xaml.Interactions.Custom/Core/DataContextChangedBehavior.cs create mode 100644 src/Avalonia.Xaml.Interactions.Custom/Core/InitializedBehavior.cs create mode 100644 src/Avalonia.Xaml.Interactions.Custom/Core/ResourcesChangedBehavior.cs diff --git a/src/Avalonia.Xaml.Interactions.Custom/Core/ActualThemeVariantChangedBehavior.cs b/src/Avalonia.Xaml.Interactions.Custom/Core/ActualThemeVariantChangedBehavior.cs new file mode 100644 index 000000000..4f2e924e4 --- /dev/null +++ b/src/Avalonia.Xaml.Interactions.Custom/Core/ActualThemeVariantChangedBehavior.cs @@ -0,0 +1,31 @@ +using System.Reactive.Disposables; +using Avalonia.Xaml.Interactivity; + +namespace Avalonia.Xaml.Interactions.Custom; + +/// +/// A base class for behaviors using ActualThemeVariantChanged event. +/// +/// +public abstract class ActualThemeVariantChangedBehavior : DisposingBehavior where T : StyledElement +{ + private CompositeDisposable? _disposables; + + /// + protected override void OnAttached(CompositeDisposable disposables) + { + _disposables = disposables; + } + + /// + protected override void OnActualThemeVariantChangedEvent() + { + OnActualThemeVariantChangedEvent(_disposables!); + } + + /// + /// Called when the ActualThemeVariantChanged event is raised. + /// + /// The group of disposable resources that are disposed together + protected abstract void OnActualThemeVariantChangedEvent(CompositeDisposable disposable); +} diff --git a/src/Avalonia.Xaml.Interactions.Custom/Core/DataContextChangedBehavior.cs b/src/Avalonia.Xaml.Interactions.Custom/Core/DataContextChangedBehavior.cs new file mode 100644 index 000000000..bceaf1d1e --- /dev/null +++ b/src/Avalonia.Xaml.Interactions.Custom/Core/DataContextChangedBehavior.cs @@ -0,0 +1,31 @@ +using System.Reactive.Disposables; +using Avalonia.Xaml.Interactivity; + +namespace Avalonia.Xaml.Interactions.Custom; + +/// +/// A base class for behaviors using DataContextChanged event. +/// +/// +public abstract class DataContextChangedBehavior : DisposingBehavior where T : StyledElement +{ + private CompositeDisposable? _disposables; + + /// + protected override void OnAttached(CompositeDisposable disposables) + { + _disposables = disposables; + } + + /// + protected override void OnDataContextChangedEvent() + { + OnDataContextChangedEvent(_disposables!); + } + + /// + /// Called when the DataContextChanged event is raised. + /// + /// The group of disposable resources that are disposed together + protected abstract void OnDataContextChangedEvent(CompositeDisposable disposable); +} diff --git a/src/Avalonia.Xaml.Interactions.Custom/Core/InitializedBehavior.cs b/src/Avalonia.Xaml.Interactions.Custom/Core/InitializedBehavior.cs new file mode 100644 index 000000000..7a5e242b2 --- /dev/null +++ b/src/Avalonia.Xaml.Interactions.Custom/Core/InitializedBehavior.cs @@ -0,0 +1,31 @@ +using System.Reactive.Disposables; +using Avalonia.Xaml.Interactivity; + +namespace Avalonia.Xaml.Interactions.Custom; + +/// +/// A base class for behaviors using Initialized event. +/// +/// +public abstract class InitializedBehavior : DisposingBehavior where T : StyledElement +{ + private CompositeDisposable? _disposables; + + /// + protected override void OnAttached(CompositeDisposable disposables) + { + _disposables = disposables; + } + + /// + protected override void OnInitializedEvent() + { + OnInitializedEvent(_disposables!); + } + + /// + /// Called when the Initialized event is raised. + /// + /// The group of disposable resources that are disposed together + protected abstract void OnInitializedEvent(CompositeDisposable disposable); +} diff --git a/src/Avalonia.Xaml.Interactions.Custom/Core/ResourcesChangedBehavior.cs b/src/Avalonia.Xaml.Interactions.Custom/Core/ResourcesChangedBehavior.cs new file mode 100644 index 000000000..b31763100 --- /dev/null +++ b/src/Avalonia.Xaml.Interactions.Custom/Core/ResourcesChangedBehavior.cs @@ -0,0 +1,31 @@ +using System.Reactive.Disposables; +using Avalonia.Xaml.Interactivity; + +namespace Avalonia.Xaml.Interactions.Custom; + +/// +/// A base class for behaviors using ResourcesChanged event. +/// +/// +public abstract class ResourcesChangedBehavior : DisposingBehavior where T : StyledElement +{ + private CompositeDisposable? _disposables; + + /// + protected override void OnAttached(CompositeDisposable disposables) + { + _disposables = disposables; + } + + /// + protected override void OnResourcesChangedEvent() + { + OnResourcesChangedEvent(_disposables!); + } + + /// + /// Called when the ResourcesChanged event is raised. + /// + /// The group of disposable resources that are disposed together + protected abstract void OnResourcesChangedEvent(CompositeDisposable disposable); +}