Browse Source

Implemented binding scheduling via service injection.

Jeremy Koritzinsky 9 years ago
parent
commit
298fa627f8
2 changed files with 10 additions and 1 deletions
  1. 7 0
      src/Avalonia.Base/AvaloniaObject.cs
  2. 3 1
      src/Avalonia.Controls/Application.cs

+ 7 - 0
src/Avalonia.Base/AvaloniaObject.cs

@@ -12,6 +12,7 @@ using Avalonia.Diagnostics;
 using Avalonia.Logging;
 using Avalonia.Threading;
 using Avalonia.Utilities;
+using System.Reactive.Concurrency;
 
 namespace Avalonia
 {
@@ -304,6 +305,12 @@ namespace Avalonia
 
             VerifyAccess();
 
+            var scheduler = AvaloniaLocator.Current.GetService<IScheduler>();
+            if (scheduler != null)
+            {
+                source = source.ObserveOn(scheduler);
+            }
+
             if (property.IsDirect)
             {
                 if (property.IsReadOnly)

+ 3 - 1
src/Avalonia.Controls/Application.cs

@@ -11,6 +11,7 @@ using Avalonia.Layout;
 using Avalonia.Rendering;
 using Avalonia.Styling;
 using Avalonia.Threading;
+using System.Reactive.Concurrency;
 
 namespace Avalonia
 {
@@ -175,7 +176,8 @@ namespace Avalonia
                 .Bind<IKeyboardNavigationHandler>().ToTransient<KeyboardNavigationHandler>()
                 .Bind<IStyler>().ToConstant(_styler)
                 .Bind<ILayoutManager>().ToSingleton<LayoutManager>()
-                .Bind<IApplicationLifecycle>().ToConstant(this);
+                .Bind<IApplicationLifecycle>().ToConstant(this)
+                .Bind<IScheduler>().ToConstant(AvaloniaScheduler.Instance);
         }
     }
 }