From d702f5cdb1dfd2d6df676a058baf97941f2ad6ee Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Tue, 28 Jan 2020 17:32:30 +1100 Subject: [PATCH 1/2] Fix: StateHasChanged firing before render being available in Blazor --- src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs b/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs index e7ada4551e..878ba65192 100644 --- a/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs +++ b/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs @@ -33,7 +33,7 @@ public class ReactiveLayoutComponentBase : LayoutComponentBase, IViewFor, /// public ReactiveLayoutComponentBase() { - this.WhenAnyValue(x => x.ViewModel).Where(x => x != null).Subscribe(_ => StateHasChanged()); + this.WhenAnyValue(x => x.ViewModel).Where(x => x != null).Subscribe(_ => InvokeAsync(StateHasChanged)); var viewModelsPropertyChanged = this.WhenAnyValue(x => x.ViewModel) .Where(x => x != null) .Select(x => Observable.FromEvent( @@ -47,7 +47,7 @@ public ReactiveLayoutComponentBase() eh => x.PropertyChanged -= eh)) .Switch(); - viewModelsPropertyChanged.Do(_ => StateHasChanged()).Subscribe(); + viewModelsPropertyChanged.Do(_ => InvokeAsync(StateHasChanged)).Subscribe(); } /// From 8909506039347b7727c31ff7f07077df94ddab7e Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Tue, 28 Jan 2020 17:34:47 +1100 Subject: [PATCH 2/2] Add also ReactiveComponentBase --- src/ReactiveUI.Blazor/ReactiveComponentBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ReactiveUI.Blazor/ReactiveComponentBase.cs b/src/ReactiveUI.Blazor/ReactiveComponentBase.cs index b6e609879f..33e8954762 100644 --- a/src/ReactiveUI.Blazor/ReactiveComponentBase.cs +++ b/src/ReactiveUI.Blazor/ReactiveComponentBase.cs @@ -35,7 +35,7 @@ public class ReactiveComponentBase : ComponentBase, IViewFor, INotifyPrope /// public ReactiveComponentBase() { - this.WhenAnyValue(x => x.ViewModel).Where(x => x != null).Subscribe(_ => StateHasChanged()); + this.WhenAnyValue(x => x.ViewModel).Where(x => x != null).Subscribe(_ => InvokeAsync(StateHasChanged)); var viewModelsPropertyChanged = this.WhenAnyValue(x => x.ViewModel) .Where(x => x != null) .Select(x => Observable.FromEvent( @@ -49,7 +49,7 @@ public ReactiveComponentBase() eh => x.PropertyChanged -= eh)) .Switch(); - viewModelsPropertyChanged.Do(_ => StateHasChanged()).Subscribe(); + viewModelsPropertyChanged.Do(_ => InvokeAsync(StateHasChanged)).Subscribe(); } ///