diff --git a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs
index f67cb7f40a..ced26a3004 100644
--- a/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs
+++ b/src/Avalonia.ReactiveUI/AppBuilderExtensions.cs
@@ -21,9 +21,8 @@ namespace Avalonia.ReactiveUI
return builder.AfterSetup(_ =>
{
RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;
- Locator.CurrentMutable.Register(
- () => new AvaloniaActivationForViewFetcher(),
- typeof(IActivationForViewFetcher));
+ Locator.CurrentMutable.RegisterConstant(new AvaloniaActivationForViewFetcher(), typeof(IActivationForViewFetcher));
+ Locator.CurrentMutable.RegisterConstant(new AutoDataTemplateBindingHook(), typeof(IPropertyBindingHook));
});
}
}
diff --git a/src/Avalonia.ReactiveUI/AutoDataTemplateBindingHook.cs b/src/Avalonia.ReactiveUI/AutoDataTemplateBindingHook.cs
new file mode 100644
index 0000000000..3f41f54363
--- /dev/null
+++ b/src/Avalonia.ReactiveUI/AutoDataTemplateBindingHook.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Linq;
+using Avalonia.Controls;
+using Avalonia.Controls.Templates;
+using Avalonia.Layout;
+using Avalonia.Markup.Xaml;
+using Avalonia.Markup.Xaml.Templates;
+using ReactiveUI;
+
+namespace Avalonia.ReactiveUI
+{
+ ///
+ /// AutoDataTemplateBindingHook is a binding hook that checks ItemsControls
+ /// that don't have DataTemplates, and assigns a default DataTemplate that
+ /// loads the View associated with each ViewModel.
+ ///
+ public class AutoDataTemplateBindingHook : IPropertyBindingHook
+ {
+ private static FuncDataTemplate DefaultItemTemplate = new FuncDataTemplate