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); } ///