Browse Source

Show default content when Router is null

pull/4473/head
artyom 6 years ago
parent
commit
f23bfafbae
  1. 8
      src/Avalonia.ReactiveUI/RoutedViewHost.cs
  2. 34
      tests/Avalonia.ReactiveUI.UnitTests/RoutedViewHostTest.cs

8
src/Avalonia.ReactiveUI/RoutedViewHost.cs

@ -66,6 +66,7 @@ namespace Avalonia.ReactiveUI
this.WhenActivated(disposables => this.WhenActivated(disposables =>
{ {
this.WhenAnyObservable(x => x.Router.CurrentViewModel) this.WhenAnyObservable(x => x.Router.CurrentViewModel)
.StartWith(default(object))
.DistinctUntilChanged() .DistinctUntilChanged()
.Subscribe(NavigateToViewModel) .Subscribe(NavigateToViewModel)
.DisposeWith(disposables); .DisposeWith(disposables);
@ -92,6 +93,13 @@ namespace Avalonia.ReactiveUI
/// <param name="viewModel">ViewModel to which the user navigates.</param> /// <param name="viewModel">ViewModel to which the user navigates.</param>
private void NavigateToViewModel(object viewModel) private void NavigateToViewModel(object viewModel)
{ {
if (Router == null)
{
this.Log().Warn("Router property is null. Falling back to default content.");
Content = DefaultContent;
return;
}
if (viewModel == null) if (viewModel == null)
{ {
this.Log().Info("ViewModel is null. Falling back to default content."); this.Log().Info("ViewModel is null. Falling back to default content.");

34
tests/Avalonia.ReactiveUI.UnitTests/RoutedViewHostTest.cs

@ -108,5 +108,39 @@ namespace Avalonia.ReactiveUI.UnitTests
Assert.Equal(typeof(TextBlock), host.Content.GetType()); Assert.Equal(typeof(TextBlock), host.Content.GetType());
Assert.Equal(defaultContent, host.Content); Assert.Equal(defaultContent, host.Content);
} }
[Fact]
public void RoutedViewHost_Should_Show_Default_Content_When_Router_Is_Null()
{
var screen = new ScreenViewModel();
var defaultContent = new TextBlock();
var host = new RoutedViewHost
{
DefaultContent = defaultContent,
PageTransition = null,
Router = null
};
var root = new TestRoot
{
Child = host
};
Assert.NotNull(host.Content);
Assert.Equal(defaultContent, host.Content);
host.Router = screen.Router;
Assert.NotNull(host.Content);
Assert.Equal(defaultContent, host.Content);
var first = new FirstRoutableViewModel();
screen.Router.Navigate.Execute(first).Subscribe();
Assert.NotNull(host.Content);
Assert.Equal(typeof(FirstRoutableView), host.Content.GetType());
Assert.Equal(first, ((FirstRoutableView)host.Content).DataContext);
Assert.Equal(first, ((FirstRoutableView)host.Content).ViewModel);
}
} }
} }
Loading…
Cancel
Save