void Push(NavigationPushInfo pushInfo)
        {
            var newPage = GetInitializedPage(pushInfo);

            switch (pushInfo.Mode)
            {
            case NavigationMode.Normal:
                NormalPush(newPage, pushInfo.OnCompletedTask);
                break;

            case NavigationMode.Modal:
                ModalPush(newPage, pushInfo.OnCompletedTask, pushInfo.NewNavigationStack);
                break;

            case NavigationMode.Root:
                RootPush(newPage, pushInfo.OnCompletedTask);
                break;

            case NavigationMode.Custom:
                CustomPush(newPage, pushInfo.OnCompletedTask);
                break;

            default:
                throw new NotImplementedException();
            }
        }
        void NavigationPushCallback(MessageBus bus, NavigationPushInfo navigationPushInfo)
        {
            if (navigationPushInfo == null)
            {
                throw new ArgumentNullException(nameof(navigationPushInfo));
            }
            if (string.IsNullOrEmpty(navigationPushInfo.To))
            {
                throw new FieldAccessException(@"'To' page value should be set");
            }

            Push(navigationPushInfo);
        }
 Page GetInitializedPage(NavigationPushInfo navigationPushInfo)
 {
     return(GetInitializedPage(navigationPushInfo.To, navigationPushInfo.NavigationParams));
 }