Browse Source

Use Loaded event in ReactiveUI

pull/8738/head
Max Katz 4 years ago
parent
commit
65c559e6c9
  1. 28
      src/Avalonia.ReactiveUI/AvaloniaActivationForViewFetcher.cs

28
src/Avalonia.ReactiveUI/AvaloniaActivationForViewFetcher.cs

@ -2,6 +2,7 @@ using System;
using System.Reactive.Linq; using System.Reactive.Linq;
using Avalonia.VisualTree; using Avalonia.VisualTree;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Interactivity;
using ReactiveUI; using ReactiveUI;
namespace Avalonia.ReactiveUI namespace Avalonia.ReactiveUI
@ -25,27 +26,28 @@ namespace Avalonia.ReactiveUI
public IObservable<bool> GetActivationForView(IActivatableView view) public IObservable<bool> GetActivationForView(IActivatableView view)
{ {
if (!(view is IVisual visual)) return Observable.Return(false); if (!(view is IVisual visual)) return Observable.Return(false);
if (view is WindowBase window) return GetActivationForWindowBase(window); if (view is Control control) return GetActivationForControl(control);
return GetActivationForVisual(visual); return GetActivationForVisual(visual);
} }
/// <summary> /// <summary>
/// Listens to Opened and Closed events for Avalonia windows. /// Listens to Loaded and Unloaded
/// events for Avalonia Control.
/// </summary> /// </summary>
private IObservable<bool> GetActivationForWindowBase(WindowBase window) private IObservable<bool> GetActivationForControl(Control control)
{ {
var windowLoaded = Observable var controlLoaded = Observable
.FromEventPattern( .FromEventPattern<RoutedEventArgs>(
x => window.Opened += x, x => control.Loaded += x,
x => window.Opened -= x) x => control.Loaded -= x)
.Select(args => true); .Select(args => true);
var windowUnloaded = Observable var controlUnloaded = Observable
.FromEventPattern( .FromEventPattern<RoutedEventArgs>(
x => window.Closed += x, x => control.Unloaded += x,
x => window.Closed -= x) x => control.Unloaded -= x)
.Select(args => false); .Select(args => false);
return windowLoaded return controlLoaded
.Merge(windowUnloaded) .Merge(controlUnloaded)
.DistinctUntilChanged(); .DistinctUntilChanged();
} }

Loading…
Cancel
Save