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(); }
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>(); }
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(); }
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); }
/// <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>(); }
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()); }
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 }; }
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)); }
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(); }
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(); }
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(); }
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); }
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); }