From 2b6c74148eb252d1d21fd9c8fd819ceed8b368a5 Mon Sep 17 00:00:00 2001 From: artyom Date: Fri, 23 Oct 2020 12:11:18 +0300 Subject: [PATCH] Use ObservableForProperty() instead of WhenAny() with Skip() --- src/Avalonia.ReactiveUI/ReactiveUserControl.cs | 13 +++++++------ src/Avalonia.ReactiveUI/ReactiveWindow.cs | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) 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); } ///