Browse Source

Use Loaded event in ReactiveUI

Max Katz 3 years ago
parent
commit
65c559e6c9
1 changed files with 15 additions and 13 deletions
  1. 15 13
      src/Avalonia.ReactiveUI/AvaloniaActivationForViewFetcher.cs

+ 15 - 13
src/Avalonia.ReactiveUI/AvaloniaActivationForViewFetcher.cs

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