diff --git a/src/Artemis.UI.Shared/Routing/Routable/IRoutableHostScreen.cs b/src/Artemis.UI.Shared/Routing/Routable/IRoutableHostScreen.cs
index b09afb676..b524f739a 100644
--- a/src/Artemis.UI.Shared/Routing/Routable/IRoutableHostScreen.cs
+++ b/src/Artemis.UI.Shared/Routing/Routable/IRoutableHostScreen.cs
@@ -9,5 +9,6 @@ internal interface IRoutableHostScreen : IRoutableScreen
{
bool RecycleScreen { get; }
IRoutableScreen? InternalScreen { get; }
+ IRoutableScreen? InternalDefaultScreen { get; }
void InternalChangeScreen(IRoutableScreen? screen);
}
\ No newline at end of file
diff --git a/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreen.cs b/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreen.cs
index c61c27820..ca5208f19 100644
--- a/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreen.cs
+++ b/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreen.cs
@@ -25,7 +25,13 @@ public bool RecycleScreen
protected set => RaiseAndSetIfChanged(ref _recycleScreen, value);
}
+ ///
+ /// Gets the screen to show when no other screen is active.
+ ///
+ public virtual TScreen? DefaultScreen { get; }
+
IRoutableScreen? IRoutableHostScreen.InternalScreen => Screen;
+ IRoutableScreen? IRoutableHostScreen.InternalDefaultScreen => DefaultScreen;
void IRoutableHostScreen.InternalChangeScreen(IRoutableScreen? screen)
{
diff --git a/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreenTParam.cs b/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreenTParam.cs
index 89773e8d4..1dfef6b76 100644
--- a/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreenTParam.cs
+++ b/src/Artemis.UI.Shared/Routing/Routable/RoutableHostScreenOfTScreenTParam.cs
@@ -27,7 +27,13 @@ public bool RecycleScreen
protected set => RaiseAndSetIfChanged(ref _recycleScreen, value);
}
+ ///
+ /// Gets the screen to show when no other screen is active.
+ ///
+ public virtual TScreen? DefaultScreen { get; }
+
IRoutableScreen? IRoutableHostScreen.InternalScreen => Screen;
+ IRoutableScreen? IRoutableHostScreen.InternalDefaultScreen => DefaultScreen;
void IRoutableHostScreen.InternalChangeScreen(IRoutableScreen? screen)
{
diff --git a/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTParam.cs b/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTParam.cs
index bbe71fe2a..52e8a5e48 100644
--- a/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTParam.cs
+++ b/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTParam.cs
@@ -13,6 +13,11 @@ namespace Artemis.UI.Shared.Routing;
/// The type of parameters the screen expects. It must have a parameterless constructor.
public abstract class RoutableScreen : RoutableScreen, IRoutableScreen where TParam : new()
{
+ ///
+ /// Gets or sets the parameter source of the screen.
+ ///
+ protected ParameterSource ParameterSource { get; set; } = ParameterSource.Segment;
+
///
/// Called while navigating to this screen.
///
@@ -26,15 +31,16 @@ public virtual Task OnNavigating(TParam parameters, NavigationArguments args, Ca
{
return Task.CompletedTask;
}
-
+
async Task IRoutableScreen.InternalOnNavigating(NavigationArguments args, CancellationToken cancellationToken)
{
Func