/// <summary>
        /// Creates an <see cref="ObservableValue{T}"/> available via data binding from any page,
        /// affected by a source observable.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="name"></param>
        /// <param name="inputObservableSelector"></param>
        /// <param name="initialValue"></param>
        /// <returns></returns>
        public static ObservableValue <T> CreateGlobalProperty <T>(string name, Func <IObservable <T> > inputObservableSelector, T initialValue = default(T))
        {
            var observableValue = new ObservableValue <T>(initialValue);

            BaseViewModel.AddGlobalProperty <T>(name, observableValue);

            observableValue.AddInput(inputObservableSelector());

            return(observableValue);
        }
        /// <summary>
        /// Creates a command available via data binding from any page.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="asyncExecute"></param>
        /// <param name="canExecuteObservable"></param>
        public static void CreateGlobalCommand(string name, Func <CancellationToken, Task> asyncExecute, IObservable <bool> canExecuteObservable)
        {
            var observableValue = new ObservableValue <IAsyncCommand>(new AsyncCommand(asyncExecute, canExecuteObservable));

            BaseViewModel.AddGlobalProperty <IAsyncCommand>(name, observableValue);
        }