diff --git a/src/Avalonia.ReactiveUI/ReactiveUserControl.cs b/src/Avalonia.ReactiveUI/ReactiveUserControl.cs
index 2cf1f1e678..31f4691c90 100644
--- a/src/Avalonia.ReactiveUI/ReactiveUserControl.cs
+++ b/src/Avalonia.ReactiveUI/ReactiveUserControl.cs
@@ -25,13 +25,14 @@ namespace Avalonia.ReactiveUI
///
public ReactiveUserControl()
{
+ // This WhenActivated block calls ViewModel's WhenActivated
+ // block if the ViewModel implements IActivatableViewModel.
this.WhenActivated(disposables => { });
- this.WhenAnyValue(x => x.ViewModel)
- .Skip(1)
- .Subscribe(model => DataContext = model);
- this.WhenAnyValue(x => x.DataContext)
- .Skip(1)
- .Subscribe(context => ViewModel = context as TViewModel);
+
+ this.ObservableForProperty(x => x.ViewModel, false, true)
+ .Subscribe(args => DataContext = args.Value);
+ this.ObservableForProperty(x => x.DataContext, false, true)
+ .Subscribe(args => ViewModel = args.Value as TViewModel);
}
///
diff --git a/src/Avalonia.ReactiveUI/ReactiveWindow.cs b/src/Avalonia.ReactiveUI/ReactiveWindow.cs
index 77ffe04c5d..1204266b63 100644
--- a/src/Avalonia.ReactiveUI/ReactiveWindow.cs
+++ b/src/Avalonia.ReactiveUI/ReactiveWindow.cs
@@ -25,13 +25,14 @@ namespace Avalonia.ReactiveUI
///
public ReactiveWindow()
{
+ // This WhenActivated block calls ViewModel's WhenActivated
+ // block if the ViewModel implements IActivatableViewModel.
this.WhenActivated(disposables => { });
- this.WhenAnyValue(x => x.ViewModel)
- .Skip(1)
- .Subscribe(model => DataContext = model);
- this.WhenAnyValue(x => x.DataContext)
- .Skip(1)
- .Subscribe(context => ViewModel = context as TViewModel);
+
+ this.ObservableForProperty(x => x.ViewModel, false, true)
+ .Subscribe(args => DataContext = args.Value);
+ this.ObservableForProperty(x => x.DataContext, false, true)
+ .Subscribe(args => ViewModel = args.Value as TViewModel);
}
///