コード例 #1
0
        public WindowViewModel(
            ViewContainer.Factory viewContainerFactory,
            MenuBuilder.Factory menuItemsFactory,
            IInterTabClient interTabClient)
        {
            _viewContainerFactory = viewContainerFactory;
            _menuItemsFactory     = menuItemsFactory;
            InterTabClient        = interTabClient;

            _showMenuCommand    = ReactiveCommand.Create(ShowMenu, Observable.Return <bool>(Selected != null && !(Selected.Content is MenuBuilder)));
            ShowInGitHubCommand = ReactiveCommand.Create(() => Process.Start("https://github.com/RolandPheasant"));

            var menuController = Views.ToObservableChangeSet()
                                 .Filter(vc => vc.Content is MenuBuilder)
                                 .Transform(vc => (MenuBuilder)vc.Content)
                                 .MergeMany(menuItems => menuItems.ItemCreated)
                                 .Subscribe(item =>
            {
                Views.Add(item);
                Selected = item;
            });

            _cleanUp = Disposable.Create(() =>
            {
                menuController.Dispose();
                foreach (var disposable in Views.Select(vc => vc.Content).OfType <IDisposable>())
                {
                    disposable.Dispose();
                }
            });
        }
コード例 #2
0
        public MenuBuilder(//ILogger logger,
            ViewContainer.Factory viewContainerFactory,
            RxUiHostViewModel.Factory rxUiHostViewModelFactory,
            RxUiViewModel.Factory rxUiViewModelFactory)
        {
            //_logger = logger;

            _viewContainerFactory     = viewContainerFactory;
            _rxUiHostViewModelFactory = rxUiHostViewModelFactory;

            _menuItems = new List <MenuItem>
            {
                new MenuItem("Live Trades (RxUI)", "A basic example, illustrating where reactive-ui and dynamic data can work together",
                             () => OpenRxUi("Live Trades (RxUI)", rxUiViewModelFactory()),
                             MenuCategory.ReactiveUi,
                             new []
                {
                    new Link("View Model", "RxUiViewModel.cs", ""),
                    new Link("Blog", "Integration with reactive ui", ""),
                }),
            };

            var filterApplier = this.WhenValueChanged(t => t.Category)
                                .Subscribe(value =>
            {
                Items = _menuItems.Where(menu => menu.Category == value).ToArray();
            });

            _cleanUp = Disposable.Create(() =>
            {
                _viewCreatedSubject.OnCompleted();
                filterApplier.Dispose();
            });
        }