Skip to content

Commit

Permalink
Use OnPropertyChanged
Browse files Browse the repository at this point in the history
  • Loading branch information
wieslawsoltes committed Jan 26, 2025
1 parent 2bd3336 commit 2719b3e
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 43 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System;
using System.Diagnostics.CodeAnalysis;
using Avalonia.Data;
using Avalonia.Reactive;
using Avalonia.Threading;
using Avalonia.Xaml.Interactivity;

Expand Down Expand Up @@ -69,23 +68,18 @@ private object? BindingValue
get => GetValue(BindingValueProperty);
set => SetValue(BindingValueProperty, value);
}

static BindingTriggerBehavior()
{
ComparisonConditionProperty.Changed.Subscribe(
new AnonymousObserver<AvaloniaPropertyChangedEventArgs<ComparisonConditionType>>(OnValueChanged));

ValueProperty.Changed.Subscribe(
new AnonymousObserver<AvaloniaPropertyChangedEventArgs<object?>>(OnValueChanged));

BindingValueProperty.Changed.Subscribe(
new AnonymousObserver<AvaloniaPropertyChangedEventArgs<object?>>(OnValueChanged));
}

/// <inheritdoc />
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)
{
Expand Down Expand Up @@ -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)
{
Expand Down
36 changes: 17 additions & 19 deletions src/Avalonia.Xaml.Interactions.Custom/Focus/FocusControlBehavior.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System.Reactive.Disposables;
using Avalonia.Controls;
using Avalonia.Reactive;
using Avalonia.Threading;

namespace Avalonia.Xaml.Interactions.Custom;
Expand All @@ -25,25 +24,19 @@ public bool FocusFlag
set => SetValue(FocusFlagProperty, value);
}

/// <summary>
///
/// </summary>
/// <param name="disposables"></param>
protected override void OnAttached(CompositeDisposable disposables)
/// <inheritdoc />
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnAttached(disposables);
base.OnPropertyChanged(change);

var disposable = this.GetObservable(FocusFlagProperty)
.Subscribe(new AnonymousObserver<bool>(
focusFlag =>
{
if (focusFlag && IsEnabled)
{
Dispatcher.UIThread.Post(() => AssociatedObject?.Focus());
}
}));

disposables.Add(disposable);
if (change.Property == FocusFlagProperty)
{
var focusFlag = change.GetNewValue<bool>();
if (focusFlag && IsEnabled)
{
Execute();
}
}
}

/// <summary>
Expand All @@ -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());
}
}
26 changes: 16 additions & 10 deletions src/Avalonia.Xaml.Interactions/Core/EventTriggerBehavior.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,23 @@ public object? SourceObject
set => SetValue(SourceObjectProperty, value);
}

static EventTriggerBehavior()
/// <inheritdoc />
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
EventNameProperty.Changed.Subscribe(
new AnonymousObserver<AvaloniaPropertyChangedEventArgs<string?>>(EventNameChanged));

SourceObjectProperty.Changed.Subscribe(
new AnonymousObserver<AvaloniaPropertyChangedEventArgs<object?>>(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<string?> e)
private void EventNameChanged(AvaloniaPropertyChangedEventArgs e)
{
if (e.Sender is not EventTriggerBehavior behavior)
{
Expand All @@ -74,8 +80,8 @@ private static void EventNameChanged(AvaloniaPropertyChangedEventArgs<string?> e
return;
}

var oldEventName = e.OldValue.GetValueOrDefault();
var newEventName = e.NewValue.GetValueOrDefault();
var oldEventName = e.GetOldValue<string?>();
var newEventName = e.GetNewValue<string?>();

if (oldEventName is not null)
{
Expand All @@ -88,7 +94,7 @@ private static void EventNameChanged(AvaloniaPropertyChangedEventArgs<string?> e
}
}

private static void SourceObjectChanged(AvaloniaPropertyChangedEventArgs<object?> e)
private void SourceObjectChanged(AvaloniaPropertyChangedEventArgs e)
{
if (e.Sender is EventTriggerBehavior behavior)
{
Expand Down

0 comments on commit 2719b3e

Please # to comment.