> navigate)
- {
- // setup default parameters
-
- CurrentParameters = parameters;
- parameters = UpdateInternalParameters(parameters, mode);
-
- // pre-events
-
- var old_vm = (_frame.Content as Page)?.DataContext;
- if (old_vm is null)
- {
- _logger.Log($"No view-model is set for source page; this is okay; skipping all the [from] overrides including CanNavigate/Async.", Category.Info, Priority.None);
- }
- else if (!await CanNavigateAsync(parameters, old_vm))
- {
- return this.NavigationFailure($"[From]{old_vm}.CanNavigateAsync returned false; this is okay; FrameFacade orchestration will stop here.");
- }
- else if (!CanNavigate(parameters, old_vm))
- {
- return this.NavigationFailure($"[From]{old_vm}.CanNavigate returned false; this is okay; FrameFacade orchestration will stop here.");
- }
-
- // navigate
-
- var success = await NavigateFrameAsync(navigate);
- _logger.Log($"{nameof(FrameFacade)}.{nameof(OrchestrateAsync)}.NavigateFrameAsync() returned {success}.", Category.Info, Priority.None);
- if (!success)
- {
- return this.NavigationFailure("NavigateFrameAsync() returned false; this is very unusual, but possibly okay; FrameFacade orchestration will stop here.");
- }
-
- if (!(_frame.Content is Page new_page))
- {
- var message = "There is no new page in FrameFacade after NavigateFrameAsync; this is a critical failure. Check the page constructor, maybe?";
- _logger.Log(message, Category.Exception, Priority.High);
- throw new Exception(message);
- }
-
- // post-events
-
- if (old_vm != null)
- {
- OnNavigatedFrom(parameters, old_vm);
- }
-
- var new_vm = new_page?.DataContext;
- if (new_vm is null)
- {
- if (Mvvm.ViewModelLocator.GetAutowireViewModel(new_page) is null)
- {
- // developer didn't set autowire, and did't set datacontext manually
- _logger.Log("No view-model is set for target page, we will attempt to find view-model declared using RegisterForNavigation().", Category.Info, Priority.None);
-
- // set the autowire & see if we can find it for them
- Mvvm.ViewModelLocator.SetAutowireViewModel(new_page, true);
-
- // TODO: I wonder if I need to delay for a second?
-
- new_vm = new_page.DataContext;
-
- if (new_vm != null)
- {
- _logger.Log($"View-Model: {new_vm} found for target View: {new_page}.", Category.Info, Priority.None);
- }
- }
- }
-
- if (new_vm is null)
- {
- _logger.Log($"View-Model for source page not found; this is okay, skipping all the [to] overides.", Category.Info, Priority.None);
- }
- else
- {
- OnNavigatingTo(parameters, new_vm);
- await OnNavigatedToAsync(parameters, new_vm);
- OnNavigatedTo(parameters, new_vm);
- }
-
- // refresh-bindings
-
- BindingUtilities.UpdateBindings(new_page);
-
- // finally
-
- return this.NavigationSuccess();
- }
-
- private async Task CanNavigateAsync(INavigationParameters parameters, object vm)
- {
- if (_logStartingEvents)
- {
- _logger.Log($"STARTING {nameof(CanNavigateAsync)} parameters:{parameters}", Category.Info, Priority.None);
- }
-
- var confirm = true;
- if (vm is IConfirmNavigationAsync old_vm_confirma)
- {
- confirm = await old_vm_confirma.CanNavigateAsync(parameters);
- _logger.Log($"[From]{old_vm_confirma}.{nameof(IConfirmNavigationAsync)} returned {confirm}.", Category.Info, Priority.None);
- }
- else
- {
- _logger.Log($"[From]{nameof(IConfirmNavigationAsync)} not implemented; this is okay; we'll move on to next step in FrameFacade orchestration.", Category.Info, Priority.None);
- }
- return confirm;
- }
-
- private bool CanNavigate(INavigationParameters parameters, object vm)
- {
- if (_logStartingEvents)
- {
- _logger.Log($"STARTING {nameof(CanNavigate)} parameters:{parameters}", Category.Info, Priority.None);
- }
-
- var confirm = true;
- if (vm is IConfirmNavigation old_vm_confirms)
- {
- confirm = old_vm_confirms.CanNavigate(parameters);
- _logger.Log($"[From]{old_vm_confirms}.{nameof(IConfirmNavigation)} is {confirm}.", Category.Info, Priority.None);
- }
- else
- {
- _logger.Log($"[From]{nameof(IConfirmNavigation)} not implemented; this is okay; we'll move on to next step in FrameFacade orchestration.", Category.Info, Priority.None);
- }
- return confirm;
- }
-
- private void OnNavigatedFrom(INavigationParameters parameters, object vm)
- {
- if (_logStartingEvents)
- {
- _logger.Log($"STARTING {nameof(OnNavigatedFrom)} parameters:{parameters}", Category.Info, Priority.None);
- }
-
- if (vm != null)
- {
- if (vm is INavigatedAware old_vm_ed)
- {
- old_vm_ed.OnNavigatedFrom(parameters);
- _logger.Log($"{nameof(INavigatedAware)}.OnNavigatedFrom() called.", Category.Info, Priority.None);
- }
- else
- {
- _logger.Log($"{nameof(INavigatedAware)} not implemented; this is okay; we'll move on to next step in FrameFacade orchestration.", Category.Info, Priority.None);
- }
- }
- }
-
- private void OnNavigatingTo(INavigationParameters parameters, object vm)
- {
- if (_logStartingEvents)
- {
- _logger.Log($"STARTING {nameof(OnNavigatingTo)} parameters:{parameters}", Category.Info, Priority.None);
- }
-
- if (vm is INavigatingAware new_vm_ing)
- {
- new_vm_ing.OnNavigatingTo(parameters);
- _logger.Log($"{nameof(INavigatingAware)}.OnNavigatingTo() called.", Category.Info, Priority.None);
- }
- else
- {
- _logger.Log($"{nameof(INavigatingAware)} not implemented; this is okay; we'll move on to next step in FrameFacade orchestration.", Category.Info, Priority.None);
- }
- }
-
- private async Task OnNavigatedToAsync(INavigationParameters parameters, object vm)
- {
- if (_logStartingEvents)
- {
- _logger.Log($"STARTING {nameof(OnNavigatedToAsync)} parameters:{parameters}", Category.Info, Priority.None);
- }
-
- if (vm is INavigatedAwareAsync new_vm_ed)
- {
- await new_vm_ed.OnNavigatedToAsync(parameters);
- _logger.Log($"{nameof(INavigatedAwareAsync)}.OnNavigatedToAsync() called.", Category.Info, Priority.None);
- }
- else
- {
- _logger.Log($"{nameof(INavigatedAwareAsync)} not implemented; this is okay; we'll move on to next step in FrameFacade orchestration.", Category.Info, Priority.None);
- }
- }
-
- private void OnNavigatedTo(INavigationParameters parameters, object vm)
- {
- if (_logStartingEvents)
- {
- _logger.Log($"STARTING {nameof(OnNavigatedTo)} parameters:{parameters}", Category.Info, Priority.None);
- }
-
- if (vm is INavigatedAware new_vm_ed)
- {
- new_vm_ed.OnNavigatedTo(parameters);
- _logger.Log($"{nameof(INavigatedAware)}.OnNavigatedTo() called.", Category.Info, Priority.None);
- }
- else
- {
- _logger.Log($"{nameof(INavigatedAware)} not implemented; this is okay; we'll move on to next step in FrameFacade orchestration.", Category.Info, Priority.None);
- }
- }
-
- private INavigationParameters UpdateInternalParameters(INavigationParameters parameters, Prism.Navigation.NavigationMode mode)
- {
- parameters = parameters ?? new NavigationParameters();
- parameters.SetNavigationMode(mode);
- parameters.SetSyncronizationContext(_syncContext);
- return parameters;
- }
-
- private async Task NavigateFrameAsync(Func> navigate)
- {
- if (_logStartingEvents)
- {
- _logger.Log($"STARTING {nameof(FrameFacade)}.{nameof(NavigateFrameAsync)} HasThreadAccess: {_dispatcher.HasThreadAccess}", Category.Info, Priority.None);
- }
-
- void failedHandler(object s, NavigationFailedEventArgs e)
- {
- _logger.Log($"Frame.NavigationFailed raised. {e.SourcePageType}:{e.Exception.Message}", Category.Exception, Priority.High);
- throw e.Exception;
- }
-
- try
- {
- _frame.NavigationFailed += failedHandler;
-
- if (_dispatcher.HasThreadAccess)
- {
- return await navigate();
- }
- else
- {
- var result = false;
- await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
- {
- result = await navigate();
- });
- return result;
- }
- }
- catch (Exception ex)
- {
- _logger.Log($"Exception in FrameFacade.NavigateFrameAsync() {ex}", Category.Exception, Priority.None);
- throw new Exception("Exception in FrameFacade.NavigateFrameAsync().", ex);
- }
- finally
- {
- _frame.NavigationFailed -= failedHandler;
- }
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/FrameFacadeExtensions.cs b/Source/Windows10/Prism.Windows/Navigation/FrameFacadeExtensions.cs
deleted file mode 100644
index 5f80cacc7..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/FrameFacadeExtensions.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-
-namespace Prism.Navigation
-{
- internal static partial class FrameFacadeExtensions
- {
- internal static INavigationResult NavigationSuccess(this FrameFacade result)
- => new NavigationResult { Success = true, Exception = null };
-
- internal static INavigationResult NavigationFailure(this FrameFacade result, Exception exception)
- => new NavigationResult { Success = false, Exception = exception };
-
- internal static INavigationResult NavigationFailure(this FrameFacade result, string message)
- => new NavigationResult { Success = false, Exception = new Exception(message) };
- }
-
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/IFrameFacade.cs b/Source/Windows10/Prism.Windows/Navigation/IFrameFacade.cs
deleted file mode 100644
index cef5b1720..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/IFrameFacade.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Threading.Tasks;
-using Windows.UI.Xaml.Media.Animation;
-
-namespace Prism.Navigation
-{
- public interface IFrameFacade
- {
- bool CanGoBack();
- event EventHandler CanGoBackChanged;
- Task GoBackAsync(INavigationParameters parameters, NavigationTransitionInfo infoOverride);
-
- bool CanGoForward();
- event EventHandler CanGoForwardChanged;
- Task GoForwardAsync(INavigationParameters parameters);
-
- Task RefreshAsync();
-
- Task NavigateAsync(Uri uri, INavigationParameters parameter, NavigationTransitionInfo infoOverride);
-
- INavigationParameters CurrentParameters { get; }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/IFrameFacadeProvider.cs b/Source/Windows10/Prism.Windows/Navigation/IFrameFacadeProvider.cs
deleted file mode 100644
index e658c6ac8..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/IFrameFacadeProvider.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Prism.Navigation
-{
- public interface IFrameFacadeProvider
- {
- IFrameFacade FrameFacade { get; }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/IFrameProvider.cs b/Source/Windows10/Prism.Windows/Navigation/IFrameProvider.cs
deleted file mode 100644
index 05dc9dfeb..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/IFrameProvider.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Windows.UI.Xaml.Controls;
-
-namespace Prism.Navigation
-{
- public interface IFrameProvider
- {
- Frame Frame { get; }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/INavigationParametersExtensions.cs b/Source/Windows10/Prism.Windows/Navigation/INavigationParametersExtensions.cs
deleted file mode 100644
index 11e1f45f9..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/INavigationParametersExtensions.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System.Threading;
-
-namespace Prism.Navigation
-{
- public static class INavigationParametersExtensions
- {
- internal static void SetNavigationMode(this INavigationParameters parameters, NavigationMode mode)
- {
- if ((parameters as INavigationParametersInternal).ContainsKey(nameof(NavigationMode)))
- {
- (parameters as INavigationParametersInternal).Remove(nameof(NavigationMode));
- }
- (parameters as INavigationParametersInternal).Add(nameof(NavigationMode), mode);
- }
-
- internal static void SetNavigationService(this INavigationParameters parameters, IPlatformNavigationService service)
- {
- if ((parameters as INavigationParametersInternal).ContainsKey(nameof(NavigationService)))
- {
- (parameters as INavigationParametersInternal).Remove(nameof(NavigationService));
- }
- (parameters as INavigationParametersInternal).Add(nameof(NavigationService), service);
- }
-
- internal static void SetSyncronizationContext(this INavigationParameters parameters, SynchronizationContext context)
- {
- if ((parameters as INavigationParametersInternal).ContainsKey(nameof(SynchronizationContext)))
- {
- (parameters as INavigationParametersInternal).Remove(nameof(SynchronizationContext));
- }
- (parameters as INavigationParametersInternal).Add(nameof(SynchronizationContext), context);
- }
-
- public static NavigationMode GetNavigationMode(this INavigationParameters parameters)
- {
- if (!(parameters as INavigationParametersInternal).ContainsKey(nameof(NavigationMode)))
- {
- return default(NavigationMode);
- }
-
- return (parameters as INavigationParametersInternal).GetValue(nameof(NavigationMode));
- }
-
- public static SynchronizationContext GetSynchronizationContext(this INavigationParameters parameters)
- {
- if (!(parameters as INavigationParametersInternal).ContainsKey(nameof(SynchronizationContext)))
- {
- return null;
- }
-
- return (parameters as INavigationParametersInternal).GetValue(nameof(SynchronizationContext));
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/INavigationPath.cs b/Source/Windows10/Prism.Windows/Navigation/INavigationPath.cs
deleted file mode 100644
index de39f0c3f..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/INavigationPath.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-namespace Prism.Navigation
-{
- public interface INavigationPath
- {
- int Index { get; }
- string Key { get; }
- Type View { get; }
- INavigationParameters Parameters { get; }
- string QueryString { get; }
- Type ViewModel { get; }
-
- string ToString();
- }
-}
\ No newline at end of file
diff --git a/Source/Windows10/Prism.Windows/Navigation/INavigationServiceExtensions.cs b/Source/Windows10/Prism.Windows/Navigation/INavigationServiceExtensions.cs
deleted file mode 100644
index 5905c2a93..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/INavigationServiceExtensions.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Threading.Tasks;
-using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-using Windows.UI.Xaml.Media.Animation;
-
-namespace Prism.Navigation
-{
- public static class INavigationServiceExtensions
- {
- internal static Frame GetXamlFrame(this INavigationService service)
- {
- return ((service as IFrameFacadeProvider).FrameFacade as IFrameProvider).Frame;
- }
-
- [EditorBrowsable(EditorBrowsableState.Never)]
- public static INavigationService SetAsWindowContent(this INavigationService service, Window window, bool activate)
- {
- window.Content = service.GetXamlFrame();
- if (activate)
- {
- window.Activate();
- }
- return service;
- }
-
- public static async Task NavigateAsync(this INavigationService service, string path, params (string Name, object Value)[] parameters)
- {
- return await service.NavigateAsync(path, GetNavigationParameters(parameters));
- }
-
- public static async Task NavigateAsync(this INavigationService service, string path, NavigationTransitionInfo infoOverride = null, params (string Name, object Value)[] parameters)
- {
- return await service.NavigateAsync(path, GetNavigationParameters(parameters), infoOverride);
- }
-
- public static Task RefreshAsync(this INavigationService service)
- => (service as IPlatformNavigationService).RefreshAsync();
-
- public static bool CanGoBack(this INavigationService service)
- => (service as IPlatformNavigationService).CanGoBack();
-
- public static bool CanGoForward(this INavigationService service)
- => (service as IPlatformNavigationService).CanGoForward();
-
- public static Task GoForwardAsync(this INavigationService service, INavigationParameters parameter)
- => (service as IPlatformNavigationService).GoForwardAsync(parameter);
-
- public static Task NavigateAsync(this INavigationService service, string path, INavigationParameters parameter, NavigationTransitionInfo infoOverride)
- => (service as IPlatformNavigationService).NavigateAsync(path, parameter, infoOverride);
-
- public static Task NavigateAsync(this INavigationService service, Uri path, INavigationParameters parameter, NavigationTransitionInfo infoOverride)
- => (service as IPlatformNavigationService).NavigateAsync(path, parameter, infoOverride);
-
- public static Task GoBackAsync(this INavigationService navigationService, params (string Name, object Value)[] parameters)
- {
- return navigationService.GoBackAsync(GetNavigationParameters(parameters));
- }
-
- public static Task NavigateAsync(this INavigationService navigationService, Uri uri, params (string Name, object Value)[] parameters)
- {
- return navigationService.NavigateAsync(uri, GetNavigationParameters(parameters));
- }
-
- private static INavigationParameters GetNavigationParameters((string Name, object Value)[] parameters)
- {
- var navParams = new NavigationParameters();
- foreach (var (Name, Value) in parameters)
- {
- navParams.Add(Name, Value);
- }
- return navParams;
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/IPlatformNavigationService.cs b/Source/Windows10/Prism.Windows/Navigation/IPlatformNavigationService.cs
deleted file mode 100644
index a9268cb9d..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/IPlatformNavigationService.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Threading.Tasks;
-using Windows.UI.Xaml.Media.Animation;
-
-namespace Prism.Navigation
-{
- public interface IPlatformNavigationService : INavigationService
- {
- Task RefreshAsync();
-
- bool CanGoBack();
- event EventHandler CanGoBackChanged;
- Task GoBackAsync(INavigationParameters parameters, NavigationTransitionInfo infoOverride);
-
- bool CanGoForward();
- event EventHandler CanGoForwardChanged;
- Task GoForwardAsync();
- Task GoForwardAsync(INavigationParameters parameter);
-
- Task NavigateAsync(string path, INavigationParameters parameter, NavigationTransitionInfo infoOverride);
- Task NavigateAsync(Uri path, INavigationParameters parameter, NavigationTransitionInfo infoOverride);
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/NavigationEventArgsExtensions.cs b/Source/Windows10/Prism.Windows/Navigation/NavigationEventArgsExtensions.cs
deleted file mode 100644
index 2b507f633..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/NavigationEventArgsExtensions.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Windows.Foundation;
-using Windows.UI.Xaml.Navigation;
-
-namespace Prism.Navigation
-{
- public static class NavigationEventArgsExtensions
- {
- public static bool TryGetParameter(this NavigationEventArgs args, string name, out T value)
- {
- try
- {
- var www = new WwwFormUrlDecoder(args.Parameter.ToString());
- var result = www.GetFirstValueByName(name);
- value = (T)Convert.ChangeType(result, typeof(T));
- return true;
- }
- catch
- {
- value = default(T);
- return false;
- }
- }
-
- public static bool TryGetParameters(this NavigationEventArgs args, string name, out IEnumerable values)
- {
- try
- {
- var www = new WwwFormUrlDecoder(args.Parameter.ToString());
- values = www
- .Where(x => x.Name == name)
- .Select(x => (T)Convert.ChangeType(x.Value, typeof(T)));
- return true;
- }
- catch
- {
- values = default(IEnumerable);
- return false;
- }
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/NavigationParameters.cs b/Source/Windows10/Prism.Windows/Navigation/NavigationParameters.cs
deleted file mode 100644
index 85489d440..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/NavigationParameters.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Prism.Navigation
-{
- public class NavigationParameters : INavigationParameters, INavigationParametersInternal
- {
- public NavigationParameters()
- {
- // empty
- }
-
- public NavigationParameters(params (string Name, object Value)[] parameters)
- : this()
- {
- foreach (var (Name, Value) in parameters)
- {
- _external.Add(Name, Value);
- }
- }
-
- public NavigationParameters(string query)
- : this(string.IsNullOrWhiteSpace(query) ? Array.Empty<(string key, object value)>() : new Windows.Foundation.WwwFormUrlDecoder(query).Select(x => (x.Name, (object)x.Value)).ToArray())
- {
- // empty
- }
-
- public override string ToString()
- {
- var i = string.Join(",", _internal.Select(x => $"({x.Key}:{x.Value})"));
- var e = string.Join(",", _external.Select(x => $"({x.Key}:{x.Value})"));
- return $"{{internal:{i} external:{e}}}";
- }
-
- Dictionary _external = new Dictionary();
- internal Dictionary _internal = new Dictionary();
-
- public object this[string key]
- => _external[key];
-
- public int Count
- => _external.Count;
-
- public IEnumerable Keys
- => _external.Keys;
-
- public void Add(string key, object value)
- => _external.Add(key, value);
-
- public bool ContainsKey(string key)
- => _external.ContainsKey(key);
-
- public IEnumerator> GetEnumerator()
- => _external.GetEnumerator();
-
- public T GetValue(string key)
- {
- return (T)Convert.ChangeType(_external[key], typeof(T));
- }
-
- public IEnumerable GetValues(string key)
- => _external.Where(x => x.Key == key).Select(x => (T)x.Value);
-
- public bool TryGetValue(string key, out T value)
- {
- try
- {
- value = (T)Convert.ChangeType(_external[key], typeof(T));
- return true;
- }
- catch
- {
- value = default(T);
- return false;
- }
- }
-
- IEnumerator IEnumerable.GetEnumerator()
- => _external.GetEnumerator();
-
- // internal
-
- void INavigationParametersInternal.Add(string key, object value)
- => _internal.Add(key, value);
-
- bool INavigationParametersInternal.ContainsKey(string key)
- => _internal.ContainsKey(key);
-
- T INavigationParametersInternal.GetValue(string key)
- {
- try
- {
- if (_internal.TryGetValue(key, out var result))
- {
- if (result is T resultAsT)
- {
- return resultAsT;
- }
-
- return (T)Convert.ChangeType(result, typeof(T));
- }
- }
- catch
- {
- // ignore and return default
- }
-
- return default(T);
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/NavigationParametersExtensions.cs b/Source/Windows10/Prism.Windows/Navigation/NavigationParametersExtensions.cs
deleted file mode 100644
index da1c37a8e..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/NavigationParametersExtensions.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Prism.Navigation
-{
- public static class NavigationParametersExtensions
- {
- public static void Remove(this INavigationParametersInternal nav, string key)
- {
- (nav as NavigationParameters)._internal.Remove(key);
- }
- }
-
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/NavigationPath.cs b/Source/Windows10/Prism.Windows/Navigation/NavigationPath.cs
deleted file mode 100644
index aa7da3ebf..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/NavigationPath.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-using System.Linq;
-using Windows.Foundation;
-
-namespace Prism.Navigation
-{
- public class NavigationPath : INavigationPath
- {
- private readonly string _originalString;
-
- public string QueryString { get; }
-
- public NavigationPath(int index, string originalString, INavigationParameters parameters)
- {
- Index = index;
-
- _originalString = originalString;
-
- // parse name/key
-
- Key = originalString.Split('?').First();
-
- // parse query
-
- var queryString = originalString.Split('?').Last();
- if (queryString != Key)
- {
- QueryString = queryString;
- }
-
- // parse parameters
-
- if (!string.IsNullOrEmpty(QueryString))
- {
- var query = new WwwFormUrlDecoder(QueryString);
- foreach (var item in query)
- {
- Parameters.Add(item.Name, item.Value);
- }
- }
-
- // merge parameters
-
- if (parameters != null)
- {
- foreach (var item in parameters)
- {
- Parameters.Add(item.Key, item.Value);
- }
- }
-
- // get types
-
- if (PageRegistry.TryGetRegistration(Key, out var info))
- {
- Key = info.Key;
- View = info.View;
- ViewModel = info.ViewModel;
- }
- else
- {
- throw new Exception($"Count not find Key:[{Key}]. Use RegisterTypes()/container.RegisterForNavigation().");
- }
- }
-
- public int Index { get; }
-
- public INavigationParameters Parameters { get; } = new NavigationParameters();
-
- public string Key { get; }
-
- public Type View { get; }
-
- public Type ViewModel { get; }
-
- public override string ToString()
- {
- return _originalString;
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/NavigationQueue.cs b/Source/Windows10/Prism.Windows/Navigation/NavigationQueue.cs
deleted file mode 100644
index e973f80bc..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/NavigationQueue.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Prism.Navigation
-{
- public class NavigationQueue : Queue
- {
- public NavigationQueue(IEnumerable collection)
- : base(collection.OrderBy(x => x.Index))
- {
- // empty
- }
-
- public bool ClearBackStack { get; set; }
-
- public override string ToString()
- {
- var prefix = ClearBackStack ? "/" : string.Empty;
- return $"{prefix}{string.Join("/", ToArray().Select(x => x.ToString()))}";
- }
-
- public static NavigationQueue Parse(string path, INavigationParameters parameters)
- => TryParse(path, parameters, out var queue) ? queue : throw new Exception();
-
- public static NavigationQueue Parse(Uri path, INavigationParameters parameters)
- => TryParse(path, parameters, out var queue) ? queue : throw new Exception();
-
- public static bool TryParse(string path, INavigationParameters parameters, out NavigationQueue queue)
- {
- if (string.IsNullOrEmpty(path))
- {
- queue = null;
- return false;
- }
-
- if (Uri.TryCreate(path, UriKind.RelativeOrAbsolute, out var uri))
- {
- return TryParse(new Uri(path, UriKind.Relative), parameters, out queue);
- }
- else
- {
- queue = null;
- return false;
- }
- }
-
- public static bool TryParse(Uri uri, INavigationParameters parameters, out NavigationQueue queue)
- {
- if (uri == null)
- {
- queue = null;
- return false;
- }
-
- if (uri.IsAbsoluteUri)
- {
- throw new Exception("Navigation path must not be absolute Uri.");
- }
-
- var groups = uri.OriginalString.Split('/')
- .Where(x => !string.IsNullOrEmpty(x))
- .Select((path, index) => new NavigationPath(index, path, parameters));
-
- queue = new NavigationQueue(groups)
- {
- ClearBackStack = uri.OriginalString.StartsWith("/"),
- };
-
- return queue.Any();
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/NavigationService.cs b/Source/Windows10/Prism.Windows/Navigation/NavigationService.cs
deleted file mode 100644
index 17f79f7b5..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/NavigationService.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Linq;
-using System.Threading.Tasks;
-using Prism.Logging;
-using Windows.UI.Xaml.Media.Animation;
-
-namespace Prism.Navigation
-{
- public class NavigationService : IPlatformNavigationService, IFrameFacadeProvider
- {
- IFrameFacade IFrameFacadeProvider.FrameFacade => _frameFacade;
-
- private IFrameFacade _frameFacade { get; }
- private ILoggerFacade _logger { get; }
-
- public NavigationService(ILoggerFacade logger, IFrameFacade frameFacade)
- {
- _frameFacade = frameFacade;
- _frameFacade.CanGoBackChanged += (s, e) =>
- CanGoBackChanged?.Invoke(this, EventArgs.Empty);
- _frameFacade.CanGoForwardChanged += (s, e) =>
- CanGoForwardChanged?.Invoke(this, EventArgs.Empty);
- _logger = logger;
- }
-
- public async Task RefreshAsync()
- => await _frameFacade.RefreshAsync();
-
- // go forward
-
- public event EventHandler CanGoForwardChanged;
-
- public bool CanGoForward()
- => _frameFacade.CanGoForward();
-
- public async Task GoForwardAsync()
- => await GoForwardAsync(
- parameters: default(INavigationParameters));
-
- public async Task GoForwardAsync(INavigationParameters parameters)
- {
- if (parameters == null && _frameFacade is IFrameProvider frameProvider && frameProvider.Frame.ForwardStack.Any())
- {
- var previous = frameProvider.Frame.ForwardStack.Last().Parameter?.ToString();
- parameters = new NavigationParameters(previous);
- }
-
- return await _frameFacade.GoForwardAsync(
- parameters: parameters);
- }
-
- // go back
-
- public event EventHandler CanGoBackChanged;
-
- public bool CanGoBack()
- => _frameFacade.CanGoBack();
-
- public async Task GoBackAsync()
- => await GoBackAsync(
- parameters: default(INavigationParameters),
- infoOverride: default(NavigationTransitionInfo));
-
- public async Task GoBackAsync(INavigationParameters parameters)
- => await GoBackAsync(
- parameters: parameters,
- infoOverride: default(NavigationTransitionInfo));
-
- public async Task GoBackAsync(INavigationParameters parameters = null, NavigationTransitionInfo infoOverride = null)
- {
- if (parameters == null && _frameFacade is IFrameProvider frameProvider && frameProvider.Frame.BackStack.Any())
- {
- var previous = frameProvider.Frame.BackStack.Last().Parameter?.ToString();
- if (previous is null)
- {
- parameters = new NavigationParameters();
- }
- else
- {
- parameters = new NavigationParameters(previous);
- }
- }
-
- return await _frameFacade.GoBackAsync(
- parameters: parameters,
- infoOverride: infoOverride);
- }
-
- public async Task NavigateAsync(string path)
- => await NavigateAsync(
- uri: new Uri(path, UriKind.RelativeOrAbsolute),
- parameter: default(INavigationParameters),
- infoOverride: default(NavigationTransitionInfo));
-
- public async Task NavigateAsync(string path, INavigationParameters parameters)
- => await NavigateAsync(
- uri: new Uri(path, UriKind.RelativeOrAbsolute),
- parameter: parameters,
- infoOverride: default(NavigationTransitionInfo));
-
- public async Task NavigateAsync(string path, INavigationParameters parameter, NavigationTransitionInfo infoOverride)
- => await NavigateAsync(
- uri: new Uri(path, UriKind.RelativeOrAbsolute),
- parameter: parameter,
- infoOverride: infoOverride);
-
- // navigate(uri)
-
- public async Task NavigateAsync(Uri uri)
- => await NavigateAsync(
- uri: uri,
- parameter: default(INavigationParameters),
- infoOverride: default(NavigationTransitionInfo));
-
- public async Task NavigateAsync(Uri uri, INavigationParameters parameters)
- => await NavigateAsync(
- uri: uri,
- parameter: parameters,
- infoOverride: default(NavigationTransitionInfo));
-
- public async Task NavigateAsync(Uri uri, INavigationParameters parameter, NavigationTransitionInfo infoOverride)
- {
- _logger.Log($"{nameof(NavigationService)}.{nameof(NavigateAsync)}(uri:{uri} parameter:{parameter} info:{infoOverride})", Category.Info, Priority.None);
-
- try
- {
- return await _frameFacade.NavigateAsync(
- uri: uri,
- parameter: parameter,
- infoOverride: infoOverride);
- }
- catch (Exception ex)
- {
- _logger.Log($"Navigation error: {ex.Message}", Category.Exception, Priority.High);
- Debugger.Break();
- throw;
- }
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Navigation/PageRegistry.cs b/Source/Windows10/Prism.Windows/Navigation/PageRegistry.cs
deleted file mode 100644
index 579c0db15..000000000
--- a/Source/Windows10/Prism.Windows/Navigation/PageRegistry.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-namespace Prism.Navigation
-{
- public static class PageRegistry
- {
- static Dictionary _cache
- = new Dictionary();
-
- public static void Register(string key, (Type View, Type ViewModel) info)
- {
- _cache.Add(key, info);
- }
-
- public static bool TryGetRegistration(string key, out (string Key, Type View, Type ViewModel) info)
- {
- if (_cache.ContainsKey(key))
- {
- info = (key, _cache[key].View, _cache[key].ViewModel);
- return true;
- }
- else
- {
- info = (null, null, null);
- return false;
- }
- }
-
- public static bool TryGetRegistration(Type view, out (string Key, Type View, Type ViewModel) info)
- {
- if (_cache.Any(x => x.Value.View == view))
- {
- var cache = _cache.FirstOrDefault(x => x.Value.View == view);
- info = (cache.Key, view, cache.Value.ViewModel);
- return true;
- }
- else if (TryGetRegistration(view.Name, out info))
- {
- return true;
- }
- else
- {
- info = (null, null, null);
- return false;
- }
- }
- }
-}
diff --git a/Source/Windows10/Prism.Windows/Prism.Windows.csproj b/Source/Windows10/Prism.Windows/Prism.Windows.csproj
deleted file mode 100644
index d37f77499..000000000
--- a/Source/Windows10/Prism.Windows/Prism.Windows.csproj
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
- uap10.0.15063;uap10.0.16299
- Prism
- Prism for UWP
-
-
- Prism provides an implementation of a collection of design patterns that are helpful in writing well structured and maintainable XAML applications, including MVVM, dependency injection, commanding, event aggregation, and more. Prism's core functionality is a shared code base in a Portable Class Library targeting these platforms; WPF, Windows 10 UWP, and Xamarin Forms. Features that need to be platform specific are implemented in the respective libraries for the target platform. Prism for UWP helps you more easily design and build rich, flexible, and easy to maintain UWP applications.
- prism;win10;mvvm;uwp;
- $(PRISM_WINDOWS_VERSION)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
- True
- Resources.resx
-
-
-
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Source/Windows10/Prism.Windows/PrismApplicationBase.cs b/Source/Windows10/Prism.Windows/PrismApplicationBase.cs
deleted file mode 100644
index b50c1203c..000000000
--- a/Source/Windows10/Prism.Windows/PrismApplicationBase.cs
+++ /dev/null
@@ -1,299 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Diagnostics;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using Prism.Events;
-using Prism.Ioc;
-using Prism.Logging;
-using Prism.Modularity;
-using Prism.Mvvm;
-using Prism.Navigation;
-using Prism.Services;
-using Windows.ApplicationModel.Activation;
-using Windows.Foundation;
-using Windows.Storage;
-using Windows.UI.Core;
-using Windows.UI.Xaml;
-using Windows.UI.Xaml.Controls;
-
-namespace Prism
-{
- public abstract class PrismApplicationBase : Application, IPrismApplicationEvents
- {
- static int _initialized = 0;
- public new static PrismApplicationBase Current => (PrismApplicationBase)Application.Current;
- private static readonly SemaphoreSlim _startSemaphore = new SemaphoreSlim(1, 1);
- public const string NavigationServiceParameterName = "navigationService";
-
- public PrismApplicationBase()
- {
- InternalInitialize();
-
- base.Suspending += async (s, e) =>
- {
- if (ApplicationData.Current.LocalSettings.Values.ContainsKey("Suspend_Data"))
- {
- ApplicationData.Current.LocalSettings.Values.Remove("Suspend_Data");
- }
- ApplicationData.Current.LocalSettings.Values.Add("Suspend_Data", DateTime.Now.ToString());
- var deferral = e.SuspendingOperation.GetDeferral();
- try
- {
- OnSuspending();
- await OnSuspendingAsync();
- }
- finally
- {
- deferral.Complete();
- }
- };
- base.Resuming += async (s, e) =>
- {
- await InternalStartAsync(new StartArgs(ResumeArgs.Create(ApplicationExecutionState.Suspended), StartKinds.Resume));
- };
- }
-
- private IContainerExtension _containerExtension;
- public IContainerProvider Container => _containerExtension;
-
- protected INavigationService NavigationService { get; private set; }
-
- private void InternalInitialize()
- {
- // dependecy injection
- _containerExtension = CreateContainerExtension();
- RegisterRequiredTypes(_containerExtension);
-
- RegisterTypes(_containerExtension);
-
- _containerExtension.FinalizeExtension();
-
- // finalize the application
- ConfigureViewModelLocator();
-
- ConfigureModuleCatalog(Container.Resolve());
- InitializeModules();
- }
-
-
- private void CallOnInitializedOnce()
- {
- // once and only once, ever
- if (Interlocked.Increment(ref _initialized) == 1)
- {
- NavigationService = CreateNavigationService(null, null, SupportedNavigationGestures());
-
- OnInitialized();
- }
- }
-
- private async Task InternalStartAsync(StartArgs startArgs)
- {
- await _startSemaphore.WaitAsync();
-
- try
- {
- CallOnInitializedOnce();
- TestResuming(startArgs);
- OnStart(startArgs);
- await OnStartAsync(startArgs);
- Window.Current.Activate();
- }
- catch (Exception ex)
- {
- Container.Resolve().Log(ex.ToString(), Category.Exception, Priority.High);
- }
- finally
- {
- _startSemaphore.Release();
- }
- }
-
- private static void TestResuming(StartArgs startArgs)
- {
- if (startArgs.Arguments is ILaunchActivatedEventArgs e
- && e.PreviousExecutionState == ApplicationExecutionState.Terminated)
- {
- if (ApplicationData.Current.LocalSettings.Values.ContainsKey("Suspend_Data"))
- {
- ApplicationData.Current.LocalSettings.Values.Remove("Suspend_Data");
- startArgs.Arguments = ResumeArgs.Create(ApplicationExecutionState.Terminated);
- startArgs.StartKind = StartKinds.Resume;
- }
- }
- }
-
- protected virtual void OnSuspending() { /* empty */ }
-
- protected virtual Task OnSuspendingAsync() => Task.CompletedTask;
-
- protected abstract void RegisterTypes(IContainerRegistry containerRegistry);
-
- protected virtual void OnInitialized()
- {
- NavigationService.SetAsWindowContent(Window.Current, true);
- }
-
- protected virtual void OnStart(StartArgs args) { /* empty */ }
-
- protected virtual Task OnStartAsync(StartArgs args) => Task.CompletedTask;
-
- protected virtual Gesture[] SupportedNavigationGestures() => new Gesture[] { Gesture.Back, Gesture.Forward, Gesture.Refresh };
-
- protected virtual void ConfigureViewModelLocator()
- {
- ViewModelLocationProvider.SetDefaultViewModelFactory((view, viewModelType) =>
- {
- INavigationService navigationService = null;
-
- if (view is Page page && page.Frame != null)
- {
- navigationService = CreateNavigationService(page.Frame, null, SupportedNavigationGestures());
- }
-
- return Container.Resolve(viewModelType, (typeof(INavigationService), navigationService));
- });
- }
-
- protected virtual void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) { /* empty */ }
-
- protected virtual void InitializeModules()
- {
- if (Container.Resolve().Modules.Any())
- {
- IModuleManager manager = Container.Resolve();
- manager.Run();
- }
- }
-
- protected abstract IContainerExtension CreateContainerExtension();
-
- protected virtual void RegisterRequiredTypes(IContainerRegistry containerRegistry)
- {
- containerRegistry.Register(NavigationServiceParameterName);
- containerRegistry.Register();
- containerRegistry.Register();
-
- // standard prism services
- containerRegistry.RegisterInstance(_containerExtension);
- containerRegistry.RegisterSingleton();
- containerRegistry.RegisterSingleton();
- containerRegistry.RegisterSingleton();
- containerRegistry.RegisterSingleton();
- containerRegistry.RegisterSingleton();
- }
-
- #region Factory Methods
-
- private INavigationService CreateNavigationService(Frame frame, CoreWindow window, params Gesture[] gestures)
- {
- if (frame is null)
- frame = new Frame();
-
- if (window is null)
- window = Window.Current.CoreWindow;
-
- var gesture_service = CreateGestureServiceForWindow(window);
- var navigation_service = Container.Resolve(NavigationServiceParameterName, (typeof(Frame), frame));
- foreach (var gesture in gestures)
- {
- switch (gesture)
- {
- case Gesture.Back:
- gesture_service.BackRequested += async (s, e) => await navigation_service.GoBackAsync();
- break;
- case Gesture.Forward:
- gesture_service.ForwardRequested += async (s, e) => await navigation_service.GoForwardAsync(default(INavigationParameters));
- break;
- case Gesture.Refresh:
- gesture_service.RefreshRequested += async (s, e) => await navigation_service.RefreshAsync();
- break;
- }
- }
-
- return navigation_service;
- }
-
- IGestureService CreateGestureServiceForWindow(CoreWindow window)
- {
- var service = Container.Resolve((typeof(CoreWindow), window));
-
- // remove when closed
- void Window_Closed(CoreWindow sender, CoreWindowEventArgs args)
- {
- window.Closed -= Window_Closed;
- if (service is IDestructibleGestureService disposable)
- {
- disposable.Destroy(window);
- }
- }
- window.Closed += Window_Closed;
-
- return service;
- }
-
- #endregion
-
- #region Sealed Application Methods
-
- protected override sealed async void OnActivated(IActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Activate));
- protected override sealed async void OnCachedFileUpdaterActivated(CachedFileUpdaterActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Activate));
- protected override sealed async void OnFileActivated(FileActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Activate));
- protected override sealed async void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Activate));
- protected override sealed async void OnFileSavePickerActivated(FileSavePickerActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Activate));
- protected override sealed async void OnSearchActivated(SearchActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Activate));
- protected override sealed async void OnShareTargetActivated(ShareTargetActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Activate));
- protected override sealed async void OnLaunched(LaunchActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Launch));
- protected override sealed async void OnBackgroundActivated(BackgroundActivatedEventArgs e) => await InternalStartAsync(new StartArgs(e, StartKinds.Background));
-
- protected override void OnWindowCreated(WindowCreatedEventArgs args)
- {
- base.OnWindowCreated(args);
- _windowCreated?.Invoke(this, args);
- }
-
-#endregion
-
-#region Prism Events
-
-#pragma warning disable CS0067 // unused events
- [EditorBrowsable(EditorBrowsableState.Never)]
- private new event EventHandler