public NavigationRoot(IDetailNavigation detailNavigation, IViewFor <NavigationMenuViewModel> menuPage) { InitializeComponent(); NavigationPage.SetHasNavigationBar(this, false); detailNavigation.PushPage <MainViewModel>(resetStack: true, animate: false).Subscribe(); Detail = (NavigationView)detailNavigation.View; Master = (ContentPage)menuPage; menuPage .WhenAnyObservable(x => x.ViewModel.Navigate) .Select(_ => false) .BindTo(this, x => x.IsPresented); Events .DeviceDisplayMainDisplayInfoChanged .Where(x => x.DisplayInfo.Orientation == DisplayOrientation.Landscape && Device.Idiom == TargetIdiom.Tablet) .Subscribe(x => MasterBehavior = MasterBehavior.SplitOnLandscape) .DisposeWith(_masterDetailBindings); // HACK: [rlittlesii: July 04, 2020] This is a hack around a Xamarin.Forms iOS issue. this.WhenAnyValue(x => x.IsPresented) .Where(x => Device.RuntimePlatform == Device.iOS) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(_ => Master.IconImageSource = ImageSource.FromFile("hamburger.png")) .DisposeWith(_masterDetailBindings); ViewModel = new NavigationRootViewModel(); }
private IObservable <Unit> ExecuteNavigate(OptionViewModel arg) { // HACK: [rlittlesii: July 04, 2020] Make this not suck, this is a great case for routes. switch (arg.Option) { case ListOption.Search: return(_detailNavigation.PushPage <SearchListViewModel>()); case ListOption.DetailNavigation: return(_detailNavigation.PushPage <CoffeeListViewModel>()); case ListOption.InfiniteScroll: return(_detailNavigation.PushPage <InfiniteScrollViewModel>()); default: throw new ArgumentOutOfRangeException(); } }