Beispiel #1
0
        public App()
        {
            if (string.IsNullOrWhiteSpace(Preferences.Get("deviceId", string.Empty)))
            {
                Preferences.Set("deviceId", Guid.NewGuid().ToString());
            }

            RxApp.SuspensionHost.CreateNewAppState = () => new State();
            RxApp.SuspensionHost.SetupDefaultSuspendResume(new AkavacheSuspensionDriver <State>());

            RxApp.SuspensionHost.ObserveAppState <State>().Subscribe(state =>
            {
                Device.BeginInvokeOnMainThread(() =>
                {
                    Locator.CurrentMutable.RegisterConstant <IScreen>(state);
                    Locator.CurrentMutable.Register <IViewFor <ControlPageViewModel> >(() => new ControlPageView());
                    Locator.CurrentMutable.Register <IViewFor <SearchPageViewModel> >(() => new SearchPageView());

                    if (state.Router.GetCurrentViewModel() == null)
                    {
                        state.Router.Navigate.Execute(new ControlPageViewModel());
                    }

                    MainPage = new RoutedViewHost();
                });
            });

            MainPage = new AppPlaceholder();

            InitializeComponent();
        }
        public void RoutedViewHostDefaultContentNotNull()
        {
            var uc = new RoutedViewHost
            {
                DefaultContent = new System.Windows.Controls.Label()
            };
            var window = new WpfTestWindow();

            window.RootGrid.Children.Add(uc);

            var activation = new ActivationForViewFetcher();

            activation.GetActivationForView(window).ToObservableChangeSet(scheduler: ImmediateScheduler.Instance).Bind(out var windowActivated).Subscribe();

            activation.GetActivationForView(uc).ToObservableChangeSet(scheduler: ImmediateScheduler.Instance).Bind(out var controlActivated).Subscribe();

            var loaded = new RoutedEventArgs
            {
                RoutedEvent = FrameworkElement.LoadedEvent
            };

            window.RaiseEvent(loaded);
            uc.RaiseEvent(loaded);

            new[] { true }.AssertAreEqual(windowActivated);
            new[] { true }.AssertAreEqual(controlActivated);

            Assert.NotNull(uc.Content);

            window.Dispatcher.InvokeShutdown();
        }
Beispiel #3
0
        public void RoutedViewHost_Should_Stay_In_Sync_With_RoutingState()
        {
            var screen         = new ScreenViewModel();
            var defaultContent = new TextBlock();
            var host           = new RoutedViewHost
            {
                Router         = screen.Router,
                DefaultContent = defaultContent,
                PageTransition = null
            };

            var root = new TestRoot
            {
                Child = host
            };

            Assert.NotNull(host.Content);
            Assert.Equal(typeof(TextBlock), host.Content.GetType());
            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);

            var second = new SecondRoutableViewModel();

            screen.Router.Navigate
            .Execute(second)
            .Subscribe();

            Assert.NotNull(host.Content);
            Assert.Equal(typeof(SecondRoutableView), host.Content.GetType());
            Assert.Equal(second, ((SecondRoutableView)host.Content).DataContext);
            Assert.Equal(second, ((SecondRoutableView)host.Content).ViewModel);

            screen.Router.NavigateBack
            .Execute(Unit.Default)
            .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);

            screen.Router.NavigateBack
            .Execute(Unit.Default)
            .Subscribe();

            Assert.NotNull(host.Content);
            Assert.Equal(typeof(TextBlock), host.Content.GetType());
            Assert.Equal(defaultContent, host.Content);
        }
        public MainWindow()
        {
            InitializeComponent();

            var viewHost = new RoutedViewHost();
            this.Presenter.Content = viewHost;

            var screen = RxApp.DependencyResolver.GetService<IScreen>();
            viewHost.Router = screen.Router;

            DataContext = RxApp.DependencyResolver.GetService<IMainWindowViewModel>();
        }
Beispiel #5
0
        public App()
        {
            InitializeComponent();

            Router = new RoutingState();
            Locator.CurrentMutable.RegisterConstant(this, typeof(IScreen));
            Locator.CurrentMutable.Register(() => new LoginPage(), typeof(IViewFor <LoginViewModel>));
            Locator.CurrentMutable.Register(() => new CarsListViewPage(), typeof(IViewFor <CarsListViewModel>));
            Router.NavigateAndReset.Execute(new LoginViewModel());

            MainPage = new RoutedViewHost();
        }
Beispiel #6
0
        public void RoutedViewHost_Should_Stay_In_Sync_With_RoutingState()
        {
            var screen         = new ScreenViewModel();
            var defaultContent = new TextBlock();
            var host           = new RoutedViewHost
            {
                Router         = screen.Router,
                DefaultContent = defaultContent,
                PageTransition = null
            };

            var root = new TestRoot
            {
                Child = host
            };

            Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
            Assert.NotNull(host.Content);
            Assert.IsType <TextBlock>(host.Content);
            Assert.Equal(defaultContent, host.Content);

            var first = new FirstRoutableViewModel();

            screen.Router.Navigate.Execute(first).Subscribe();

            Assert.NotNull(host.Content);
            Assert.IsType <FirstRoutableView>(host.Content);
            Assert.Equal(first, ((FirstRoutableView)host.Content).DataContext);
            Assert.Equal(first, ((FirstRoutableView)host.Content).ViewModel);

            var second = new SecondRoutableViewModel();

            screen.Router.Navigate.Execute(second).Subscribe();

            Assert.NotNull(host.Content);
            Assert.IsType <SecondRoutableView>(host.Content);
            Assert.Equal(second, ((SecondRoutableView)host.Content).DataContext);
            Assert.Equal(second, ((SecondRoutableView)host.Content).ViewModel);

            screen.Router.NavigateBack.Execute(Unit.Default).Subscribe();

            Assert.NotNull(host.Content);
            Assert.IsType <FirstRoutableView>(host.Content);
            Assert.Equal(first, ((FirstRoutableView)host.Content).DataContext);
            Assert.Equal(first, ((FirstRoutableView)host.Content).ViewModel);

            screen.Router.NavigateBack.Execute(Unit.Default).Subscribe();

            Assert.NotNull(host.Content);
            Assert.IsType <TextBlock>(host.Content);
            Assert.Equal(defaultContent, host.Content);
        }
Beispiel #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MainWindow"/> class.
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();

            ThemeManager.ChangeTheme(this, new Accent("GreaseTheme", new Uri("pack://application:,,,/Grease;component/Accents/GreaseAccent.xaml")), Theme.Light);
            var viewHost = new RoutedViewHost();
            this.Presenter.Content = viewHost;

            var screen = RxApp.DependencyResolver.GetService<IScreen>();
            viewHost.Router = screen.Router;

            DataContext = RxApp.DependencyResolver.GetService<IMainViewModel>();
        }
Beispiel #8
0
        private RoutedViewHost CreateRoutedViewHost(string?initialViewModel = nameof(MainViewModel))
        {
            if (initialViewModel != null)
            {
                var mainViewModel = Locator.Current.GetService <IRoutableViewModel>(initialViewModel);
                _navigationViewModel.Router.NavigationStack.Add(mainViewModel);
            }

            var routedViewHost = new RoutedViewHost();

            routedViewHost.SendAppearing();
            return(routedViewHost);
        }
        public void WhenRoutedToViewModelItShouldAddViewToControls()
        {
            var viewLocator = new FakeViewLocator {
                LocatorFunc = t => new FakeWinformsView()
            };
            var router = new RoutingState();
            var target = new RoutedViewHost {
                Router = router, ViewLocator = viewLocator
            };

            router.Navigate.Execute(new FakeWinformViewModel());

            Assert.Equal(1, target.Controls.OfType <FakeWinformsView>().Count());
        }
Beispiel #10
0
        public App()
        {
            InitializeComponent();

            // Regist ViewModels
            Locator.CurrentMutable.RegisterViewsForViewModels(GetType().Assembly);

            var screen = new MainViewModel(Locator.Current.GetService <IModelHost>());

            Locator.CurrentMutable.RegisterConstant(screen, typeof(IScreen));
            MainPage = new RoutedViewHost()
            {
                Router = screen.Router
            };
        }
Beispiel #11
0
        public MainWindow()
        {
            InitializeComponent();

            var viewHost = new RoutedViewHost();

            this.Presenter.Content = viewHost;

            var screen = RxApp.DependencyResolver.GetService <IScreen>();

            viewHost.Router = screen.Router;

            DataContext = RxApp.DependencyResolver.GetService <IMainWindowViewModel>();

            Browser.Navigated += Browser_Navigated;
        }
        public void ShouldSetDefaultContentWhenViewModelIsNull()
        {
            var defaultContent = new Control();
            var viewLocator    = new FakeViewLocator {
                LocatorFunc = t => new FakeWinformsView()
            };
            var router = new RoutingState();
            var target = new RoutedViewHost
            {
                Router         = router,
                ViewLocator    = viewLocator,
                DefaultContent = defaultContent
            };

            Assert.True(target.Controls.Contains(defaultContent));
        }
Beispiel #13
0
        public App()
        {
            InitializeComponent();

            var services = Locator.CurrentMutable;

            services.RegisterConstant <IScreen>(this);

            services.Register <IViewFor <HomeViewModel> >(() => new HomeView());

            Router = new RoutingState();
            Router.NavigateAndReset
            .Execute(new HomeViewModel())
            .Subscribe();

            MainPage = new RoutedViewHost();
        }
Beispiel #14
0
        public App()
        {
            InitializeComponent();

            Router = new RoutingState();
            Locator.CurrentMutable.RegisterConstant(this, typeof(IScreen));
            Locator.CurrentMutable.Register(() => new Login(), typeof(IViewFor <ViewModel.Login>));
            Locator.CurrentMutable.Register(() => new IntentionsList(), typeof(IViewFor <ViewModel.IntentionsList>));
            Locator.CurrentMutable.RegisterConstant(new UserApi(), typeof(IUserApi));
            Locator.CurrentMutable.RegisterConstant(new IntentionApi(), typeof(IIntentionApi));
            Locator.CurrentMutable.RegisterConstant(new ProspectApi(), typeof(IProspectApi));
            Locator.CurrentMutable.RegisterConstant(new LoginApi(), typeof(ILoginApi));

            Router.NavigateAndReset.Execute(new ViewModel.Login());

            MainPage = new RoutedViewHost();
        }
Beispiel #15
0
        public App()
        {
            InitializeComponent();

            this.Router = new RoutingState();

            // Register ourselves as the Screen instance
            Locator.CurrentMutable.RegisterConstant(this, typeof(IScreen));

            // Register the views for the view models
            Locator.CurrentMutable.Register(() => new MainPage(), typeof(IViewFor <MainPageViewModel>));
            Locator.CurrentMutable.Register(() => new DetailsPage(), typeof(IViewFor <DetailsPageViewModel>));

            // Navigate
            this.Router.Navigate.Execute(new MainPageViewModel());

            MainPage = new RoutedViewHost();
        }
Beispiel #16
0
        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
            };

            Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
            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.IsType <FirstRoutableView>(host.Content);

            host.Router = null;

            Assert.NotNull(host.Content);
            Assert.Equal(defaultContent, host.Content);

            host.Router = screen.Router;

            Assert.NotNull(host.Content);
            Assert.IsType <FirstRoutableView>(host.Content);
        }
Beispiel #17
0
        public App()
        {
            InitializeComponent();

            this.Router = new RoutingState();
            // Register ourselves as the Screen instance
            Locator.CurrentMutable.RegisterConstant(this, typeof(IScreen));

            // Register view models
            Locator.CurrentMutable.Register(() => new SearchDemoPage(), typeof(IViewFor <SearchPageViewModel>));
            Locator.CurrentMutable.Register(() => new ColorPage(), typeof(IViewFor <ColorViewModel>));
            Locator.CurrentMutable.Register(() => new RestPage(), typeof(IViewFor <RestPageViewModel>));
            Locator.CurrentMutable.Register(() => new ContainerPage(), typeof(IViewFor <ContainerPageViewModel>));
            Locator.CurrentMutable.Register(() => new EventDemoPage(), typeof(IViewFor <EventDemoViewModel>));
            Locator.CurrentMutable.Register(() => new DetailsPage(), typeof(IViewFor <DetailsViewModel>));

            // Navigate
            this.Router.Navigate.Execute(new ContainerPageViewModel());
            MainPage = new RoutedViewHost();
        }
        /// <summary>
        /// Creates the first main page used within the application.
        /// </summary>
        /// <returns>The page generated.</returns>
        public static Page CreateMainPage()
        {
            var a = new RoutedViewHost();

            Observable.FromEventPattern(a, nameof(a.Popped)).Subscribe(x =>
            {
                var args = x.EventArgs as NavigationEventArgs;
                Console.WriteLine($"\n\n\nPOP: {args.Page.Title} COUNT: {a.Navigation.NavigationStack.Count} TIME: {DateTime.Now}\n\n\n");
            });

            Observable.FromEventPattern(a, nameof(a.Pushed)).Subscribe(x =>
            {
                var args = x.EventArgs as NavigationEventArgs;
                Console.WriteLine($"\n\n\nPUSH: {args.Page.Title} COUNT: {a.Navigation.NavigationStack.Count} TIME: {DateTime.Now}\n\n\n");
            });


            // NB: This returns the opening page that the platform-specific
            // boilerplate code will look for. It will know to find us because
            // we've registered our AppBootstrappScreen.
            return(a);
        }
        public void ShouldDisposePreviousView()
        {
            var viewLocator = new FakeViewLocator {
                LocatorFunc = t => new FakeWinformsView()
            };
            var router = new RoutingState();
            var target = new RoutedViewHost {
                Router = router, ViewLocator = viewLocator
            };

            router.Navigate.Execute(new FakeWinformViewModel());

            FakeWinformsView currentView = target.Controls.OfType <FakeWinformsView>().Single();
            bool             isDisposed  = false;

            currentView.Disposed += (o, e) => isDisposed = true;

            // switch the viewmodel
            router.Navigate.Execute(new FakeWinformViewModel());

            Assert.True(isDisposed);
        }
        public void RoutedViewHost_Should_Stay_In_Sync_With_RoutingState_And_Contract()
        {
            var screen         = new ScreenViewModel();
            var defaultContent = new TextBlock();
            var host           = new RoutedViewHost
            {
                Router         = screen.Router,
                DefaultContent = defaultContent,
                PageTransition = null
            };

            var root = new TestRoot
            {
                Child = host
            };

            Assert.NotNull(host.Content);
            Assert.IsType <TextBlock>(host.Content);
            Assert.Equal(defaultContent, host.Content);

            var first = new FirstRoutableViewModel();

            screen.Router.Navigate.Execute(first).Subscribe();

            host.ViewContract = null;
            Assert.NotNull(host.Content);
            Assert.IsType <FirstRoutableView>(host.Content);
            Assert.Equal(first, ((FirstRoutableView)host.Content).DataContext);
            Assert.Equal(first, ((FirstRoutableView)host.Content).ViewModel);

            host.ViewContract = AlternativeViewContract;
            Assert.NotNull(host.Content);
            Assert.IsType <AlternativeFirstRoutableView>(host.Content);
            Assert.Equal(first, ((AlternativeFirstRoutableView)host.Content).DataContext);
            Assert.Equal(first, ((AlternativeFirstRoutableView)host.Content).ViewModel);

            var second = new SecondRoutableViewModel();

            screen.Router.Navigate.Execute(second).Subscribe();

            host.ViewContract = null;
            Assert.NotNull(host.Content);
            Assert.IsType <SecondRoutableView>(host.Content);
            Assert.Equal(second, ((SecondRoutableView)host.Content).DataContext);
            Assert.Equal(second, ((SecondRoutableView)host.Content).ViewModel);

            host.ViewContract = AlternativeViewContract;
            Assert.NotNull(host.Content);
            Assert.IsType <AlternativeSecondRoutableView>(host.Content);
            Assert.Equal(second, ((AlternativeSecondRoutableView)host.Content).DataContext);
            Assert.Equal(second, ((AlternativeSecondRoutableView)host.Content).ViewModel);

            screen.Router.NavigateBack.Execute(Unit.Default).Subscribe();

            Assert.NotNull(host.Content);
            Assert.IsType <AlternativeFirstRoutableView>(host.Content);
            Assert.Equal(first, ((AlternativeFirstRoutableView)host.Content).DataContext);
            Assert.Equal(first, ((AlternativeFirstRoutableView)host.Content).ViewModel);

            screen.Router.NavigateBack.Execute(Unit.Default).Subscribe();

            Assert.NotNull(host.Content);
            Assert.IsType <TextBlock>(host.Content);
            Assert.Equal(defaultContent, host.Content);
        }