diff --git a/src/ReactiveUI.Blazor/ReactiveComponentBase.cs b/src/ReactiveUI.Blazor/ReactiveComponentBase.cs index 33e8954762..b096156a3f 100644 --- a/src/ReactiveUI.Blazor/ReactiveComponentBase.cs +++ b/src/ReactiveUI.Blazor/ReactiveComponentBase.cs @@ -11,6 +11,7 @@ using System.Reactive.Linq; using System.Reactive.Subjects; using System.Runtime.CompilerServices; +using System.Threading.Tasks; using Microsoft.AspNetCore.Components; namespace ReactiveUI.Blazor @@ -35,7 +36,6 @@ public class ReactiveComponentBase : ComponentBase, IViewFor, INotifyPrope /// public ReactiveComponentBase() { - 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( @@ -56,6 +56,7 @@ public ReactiveComponentBase() public event PropertyChangedEventHandler PropertyChanged; /// + [Parameter] public T ViewModel { get => _viewModel; @@ -99,6 +100,15 @@ protected override void OnInitialized() base.OnInitialized(); } + /// + protected override void OnAfterRender(bool isFirstRender) + { + if (isFirstRender) + { + this.WhenAnyValue(x => x.ViewModel).Where(x => x != null).Subscribe(_ => InvokeAsync(StateHasChanged)); + } + } + /// /// Invokes the property changed event. /// diff --git a/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs b/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs index 878ba65192..eac4991c8e 100644 --- a/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs +++ b/src/ReactiveUI.Blazor/ReactiveLayoutComponentBase.cs @@ -11,6 +11,7 @@ using System.Reactive.Linq; using System.Reactive.Subjects; using System.Runtime.CompilerServices; +using System.Threading.Tasks; using Microsoft.AspNetCore.Components; namespace ReactiveUI.Blazor @@ -33,7 +34,6 @@ public class ReactiveLayoutComponentBase : LayoutComponentBase, IViewFor, /// public ReactiveLayoutComponentBase() { - 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( @@ -97,6 +97,15 @@ protected override void OnInitialized() base.OnInitialized(); } + /// + protected override void OnAfterRender(bool isFirstRender) + { + if (isFirstRender) + { + this.WhenAnyValue(x => x.ViewModel).Where(x => x != null).Subscribe(_ => InvokeAsync(StateHasChanged)); + } + } + /// /// Invokes the property changed event. ///