private void RemoveViewFor(ReactiveViewModel viewModel)
        {
            var view = LookupView(viewModel);

            _regionTarget.Items.Remove(view);
            _viewContainer.Remove(viewModel);
        }
Exemple #2
0
        protected internal override void AddView(INavigableRegion region, ReactiveViewModel viewModel)
        {
            var items = RegionTarget.ItemsSource as IList ?? RegionTarget.Items as IList;

            if (items != null)
            {
                var sortableItem = viewModel as ISortable;
                if (sortableItem != null)
                {
                    var insertAtIndex = items.Count -
                                        items
                                        .OfType <FrameworkElement>()
                                        .Select(x => x.DataContext)
                                        .Cast <ISortable>()
                                        .OrderBy(x => x.SortHint)
                                        .SkipWhile(x => x.SortHint < sortableItem.SortHint)
                                        .Count();

                    items.Insert(insertAtIndex, sortableItem);
                }
                else
                {
                    items.Add(viewModel);
                }
            }
        }
Exemple #3
0
 protected internal override void ActivateView(INavigableRegion region, ReactiveViewModel viewModel)
 {
     object view;
     if (_cachedViews.TryGetValue(viewModel, out view))
     {
         RegionTarget.Content = view;
     }
 }
Exemple #4
0
    public void Run()
    {
        var target = new ReactiveViewModel();
        var notificationOccured = false;

        target.WhenAnyValue(m => m.Property).Subscribe(x => notificationOccured = true);
        Assert.True(notificationOccured);
    }
        public bool Contains(ReactiveViewModel viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException("viewModel", "viewModel is null.");
            }

            return(_ownedViewModels.Keys.Contains(viewModel));
        }
Exemple #6
0
        protected internal override void RemoveView(INavigableRegion region, ReactiveViewModel viewModel)
        {
            var items = RegionTarget.ItemsSource as IList ?? RegionTarget.Items as IList;

            if (items.Contains(viewModel))
            {
                items.Remove(viewModel);
            }
        }
        private async Task CloseExistingTarget(IRegion region, ReactiveViewModel navigationTarget, INavigationParameters parameters)
        {
            await Observable.Start(() => navigationTarget.Close(parameters), RxApp.TaskpoolScheduler).ToTask().ConfigureAwait(false);

            await Observable.Start(() =>
            {
                region.Deactivate(navigationTarget);
                region.Remove(navigationTarget);
            }, RxApp.MainThreadScheduler).ToTask().ConfigureAwait(false);
        }
Exemple #8
0
        public void SubscribesStream(User user)
        {
            var sut = new ReactiveViewModel <User, string>(user.Id);

            sut.MonitorEvents();

            Connect(user.Id).Emit(user);

            sut.Model.Should().BeSameAs(user);
            sut.ShouldRaisePropertyChangeFor(x => x.Model);
        }
Exemple #9
0
        public void Add_ShouldPushAddedInstanceToAddedObservable()
        {
            var sut = Fixture.Create <Region>();

            ReactiveViewModel addedVm = null;
            var obs = sut.Added.Subscribe(x => addedVm = x);

            var vm = sut.Add <ReactiveViewModel>();

            addedVm.Should().Be(vm);
        }
        private async Task RequestNavigateAsyncInternal(IRegion region, ReactiveViewModel navigationTarget, INavigationParameters parameters)
        {
            var canNavigateTo = await Observable.Start(() => navigationTarget.CanNavigateTo(parameters), RxApp.MainThreadScheduler).ToTask().ConfigureAwait(false);

            if (canNavigateTo)
            {
                await NavigateToExistingTarget(region, navigationTarget, parameters).ConfigureAwait(false);
            }

            await Task.FromResult(false);
        }
Exemple #11
0
 protected internal override void ActivateView(INavigableRegion region, ReactiveViewModel viewModel)
 {
     try
     {
         _suppressSelectionChanged = true;
         RegionTarget.SelectedItem = viewModel;
     }
     finally
     {
         _suppressSelectionChanged = false;
     }
 }
Exemple #12
0
        public object CreateViewFor(ReactiveViewModel viewModel)
        {
            var key = viewModel.GetType();
            Func <ReactiveViewModel, object> createView;

            if (_catalog.TryGetValue(key, out createView))
            {
                return(createView(viewModel));
            }

            throw new NotSupportedException();
        }
Exemple #13
0
        public void ModelSetterRaisesEventWithModelChangedEventArgs(User user)
        {
            var sut = new ReactiveViewModel <User, string>(user.Id);

            sut.MonitorEvents();

            Connect(user.Id).Emit(user);

            sut.ShouldRaisePropertyChangeFor(x => x.Model)
            .WithArgs <PropertyChangedEventArgs>(args => ReferenceEquals(
                                                     args, ReactiveViewModel.ModelChangedEventArgs));
        }
Exemple #14
0
        public async Task RequestClose(ReactiveViewModel navigationTarget, INavigationParameters parameters)
        {
            if (navigationTarget == null)
            {
                throw new ArgumentNullException("navigationTarget", "navigationTarget is null.");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters", "parameters is null.");
            }

            await Router.RequestCloseAsync(Region, navigationTarget, parameters).ConfigureAwait(false);
        }
Exemple #15
0
        public void Activate_ShouldPushActivatedInstanceToActivatedObservable()
        {
            var sut = Fixture.Create <Region>();

            ReactiveViewModel activatedVm = null;
            var obs = sut.Activated.Subscribe(x => activatedVm = x);

            var vm = sut.Add <ReactiveViewModel>();    // must add, before we can activate it

            sut.Activate(vm);

            activatedVm.Should().Be(vm);
        }
        public void Deactivate(ReactiveViewModel viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException("viewModel", "viewModel is null.");
            }
            if (!Contains(viewModel))
            {
                throw new ArgumentException("viewModel does not belong to region");
            }

            _deactivated.OnNext(viewModel);
        }
        public Task RequestClose(ReactiveViewModel navigationTarget, INavigationParameters parameters)
        {
            if (navigationTarget == null)
            {
                throw new ArgumentNullException("navigationTarget", "navigationTarget is null.");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters", "parameters is null.");
            }

            return(NavigableRegion.RequestClose(navigationTarget, parameters));
        }
Exemple #18
0
        protected internal override void RemoveView(INavigableRegion region, ReactiveViewModel viewModel)
        {
            RegionTarget.Content = null;

            object view;
            if (_cachedViews.TryRemove(viewModel, out view))
            {
                var disposable = view as IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
        }
        public void Add_WhenRegionAlreadyContainsAnItem_ShouldRemoveContainedItem()
        {
            var sut = Fixture.Create <SingleItemRegion>();

            ReactiveViewModel removedVm = null;

            using (var obs = sut.Removed.Subscribe(x => removedVm = x))
            {
                var vm = sut.Add <ReactiveViewModel>();
                sut.Add <ReactiveViewModel>();

                removedVm.Should().Be(vm);
            }
        }
Exemple #20
0
        public void Remove_ShouldPushRemovedInstanceToRemovedObservable()
        {
            var sut = Fixture.Create <Region>();

            ReactiveViewModel removedVm = null;

            sut.Removed.Subscribe(x => removedVm = x);

            var vm = sut.Add <ReactiveViewModel>();    // must add, before we can remove it

            sut.Remove(vm);

            removedVm.Should().Be(vm);
        }
        private void ActivateViewFor(ReactiveViewModel viewModel)
        {
            var view = LookupView(viewModel);

            try
            {
                _suppressSelectionChanged  = true;
                _regionTarget.SelectedItem = view;
            }
            finally
            {
                _suppressSelectionChanged = false;
            }
        }
Exemple #22
0
        public TabViewModel(INavigate router, ReactiveViewModel childViewModel)
        {
            if (router == null)
            {
                throw new ArgumentNullException("router", "router is null.");
            }
            if (childViewModel == null)
            {
                throw new ArgumentNullException("childViewModel", "childViewModel is null.");
            }

            _router         = router;
            _childViewModel = childViewModel;

            Close = ReactiveCommand.CreateFromTask(_ => Router.RequestClose(ChildViewModel, NavigationParameters.UserNavigation));
        }
        public void Remove(ReactiveViewModel viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException("viewModel", "viewModel is null.");
            }
            if (!Contains(viewModel))
            {
                throw new ArgumentException("viewModel does not belong to region");
            }

            IDisposable scopedTarget;

            if (_ownedViewModels.TryRemove(viewModel, out scopedTarget))
            {
                scopedTarget.Dispose();
                _removed.OnNext(viewModel);
            }
        }
        private void AddViewFor(INavigableRegion region, ReactiveViewModel viewModel)
        {
            var view = _viewFactory.CreateViewFor(viewModel);

            var tabViewModel = new TabViewModel(region, viewModel);

            var tabView = new TabView()
            {
                DataContext = tabViewModel
            };

            var tab = new TabItem
            {
                Header  = tabView,
                Content = view
            };

            _viewContainer.Add(viewModel, tab);
            _regionTarget.Items.Add(tab);
        }
        public Task RequestNavigateAsync(IRegion region, ReactiveViewModel navigationTarget, INavigationParameters parameters)
        {
            if (region == null)
            {
                throw new ArgumentNullException("region", "region is null.");
            }
            if (navigationTarget == null)
            {
                throw new ArgumentNullException("navigationTarget", "navigationTarget is null.");
            }
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters", "parameters is null.");
            }
            if (!region.Contains(navigationTarget))
            {
                throw new ArgumentException("navigationTarget does not belong to region");
            }

            return(RequestNavigateAsyncInternal(region, navigationTarget, parameters));
        }
        public object CreateViewFor(ReactiveViewModel viewModel)
        {
            if (viewModel == null)
            {
                throw new ArgumentNullException("viewModel", "viewModel is null.");
            }

            var factory = _viewFactories[viewModel.GetType()];

            var view = factory();

            view.DataContext = viewModel;

            // if RxUI bindings are used, also set ViewModel property
            var rxView = view as IViewFor;

            if (rxView != null)
            {
                rxView.ViewModel = viewModel;
            }

            return(view);
        }
Exemple #27
0
 internal protected abstract void InitializeView(INavigableRegion region, ReactiveViewModel viewModel);
Exemple #28
0
 internal protected abstract void DeactivateView(INavigableRegion region, ReactiveViewModel viewModel);
Exemple #29
0
 protected internal override void InitializeView(INavigableRegion region, ReactiveViewModel viewModel)
 {
 }
Exemple #30
0
 protected internal override void DeactivateView(INavigableRegion region, ReactiveViewModel viewModel)
 {
 }