public ViewModelViewHost(NSView targetView)
        {
            NSView viewLastAdded = null;

            this.WhenAny(x => x.DefaultContent, x => x.ViewModel, (c, v) => Unit.Default)
            .Subscribe(_ => {
                if (viewLastAdded != null)
                {
                    viewLastAdded.RemoveFromSuperview();
                }

                if (ViewModel == null)
                {
                    if (DefaultContent != null)
                    {
                        targetView.AddSubview(DefaultContent.View);
                    }
                    return;
                }

                var view       = RxRouting.ResolveView(ViewModel);
                view.ViewModel = ViewModel;

                viewLastAdded = ((NSViewController)view).View;
                targetView.AddSubview(viewLastAdded);
            });
        }
Exemple #2
0
        void updateRouter()
        {
            if (currentRouterSub != null)
            {
                currentRouterSub.Dispose();
                currentRouterSub = null;
            }

            if (Router == null)
            {
                return;
            }

            currentRouterSub = Router.ViewModelObservable().Subscribe(vm => {
                if (vm == null)
                {
                    Child = DefaultContent;
                    return;
                }

                var view       = RxRouting.ResolveView(vm);
                view.ViewModel = vm;
                Child          = (Widget)view;
            });
        }
Exemple #3
0
        public void ResolvePureInterfaceType()
        {
            RxApp.ConfigureServiceLocator(
                (x, _) => (x == typeof(IViewForViewModel <IFooBarViewModel>) ? new FooBarView() : null),
                (x, _) => null);

            var vm = new FooBarViewModel(null);

            var result = RxRouting.ResolveView(vm);

            this.Log().Info(result.GetType().FullName);
            Assert.True(result is FooBarView);
        }
Exemple #4
0
        public void ResolveExplicitViewType()
        {
            RxApp.ConfigureServiceLocator(
                (x, _) => (x.Name == "IBazView" ? new BazView() : null),
                (x, _) => null);

            var vm = new BazViewModel(null);

            var result = RxRouting.ResolveView(vm);

            this.Log().Info(result.GetType().FullName);
            Assert.True(result is BazView);
        }
Exemple #5
0
        public RoutedViewHost(NSView targetView)
        {
            NSView viewLastAdded = null;

            this.WhenAny(x => x.Router.NavigationStack, x => x.Value)
            .SelectMany(x => x.CollectionCountChanged.StartWith(x.Count).Select(_ => x.LastOrDefault()))
            .Subscribe(vm => {
                if (viewLastAdded != null)
                {
                    viewLastAdded.RemoveFromSuperview();
                }

                if (vm == null)
                {
                    if (DefaultContent != null)
                    {
                        targetView.AddSubview(DefaultContent.View);
                    }
                    return;
                }

                var view       = RxRouting.ResolveView(vm);
                view.ViewModel = vm;

                if (view is NSViewController)
                {
                    viewLastAdded = ((NSViewController)view).View;
                }
                else if (view is NSView)
                {
                    viewLastAdded = (NSView)view;
                }
                else
                {
                    throw new Exception(String.Format("'{0}' must be an NSViewController or NSView", view.GetType().FullName));
                }

                targetView.AddSubview(viewLastAdded);
            }, ex => RxApp.DefaultExceptionHandler.OnNext(ex));
        }
        public ActivityRoutedViewHost(Activity hostActivity)
        {
            var keyUp = hostActivity.GetType()
                        .GetMethods(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance)
                        .FirstOrDefault(x => x.Name == "OnKeyUp");

            if (keyUp == null)
            {
                throw new Exception("You must override OnKeyUp and call theRoutedViewHost.OnKeyUp");
            }

            var viewFor = hostActivity as IViewFor;

            if (viewFor == null)
            {
                throw new Exception("You must implement IViewFor<TheViewModelClass>");
            }

            bool firstSet = false;

            _inner = _hostScreen.Router.ViewModelObservable()
                     .Where(x => x != null)
                     .Subscribe(vm => {
                if (!firstSet)
                {
                    viewFor.ViewModel = vm;
                    firstSet          = true;
                    return;
                }

                var view = RxRouting.ResolveView(vm);
                if (view.GetType() != typeof(Type))
                {
                    throw new Exception("Views in Android must be the Type of an Activity");
                }

                hostActivity.StartActivity((Type)view);
            });
        }