Beispiel #1
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);
                }
            }
        }
Beispiel #2
0
 protected internal override void ActivateView(INavigableRegion region, ReactiveViewModel viewModel)
 {
     object view;
     if (_cachedViews.TryGetValue(viewModel, out view))
     {
         RegionTarget.Content = view;
     }
 }
Beispiel #3
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);
            }
        }
Beispiel #4
0
 protected internal override void AdaptToRegionTarget(INavigableRegion region)
 {
     AddDisposable(
         Observable
         .FromEventPattern <SelectionChangedEventArgs>(RegionTarget, "SelectionChanged")
         .Where(e => ReferenceEquals(e.EventArgs.OriginalSource, RegionTarget))
         .Where(_ => !_suppressSelectionChanged)
         .Where(_ => RegionTarget.SelectedItem != null)
         .Do(_ => region.RequestNavigate(RegionTarget.SelectedItem as ReactiveViewModel, NavigationParameters.UserNavigation))        // TODO: SelectMany?
         .Subscribe());
 }
Beispiel #5
0
 protected internal override void ActivateView(INavigableRegion region, ReactiveViewModel viewModel)
 {
     try
     {
         _suppressSelectionChanged = true;
         RegionTarget.SelectedItem = viewModel;
     }
     finally
     {
         _suppressSelectionChanged = false;
     }
 }
Beispiel #6
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();
                }
            }
        }
Beispiel #7
0
        public void Adapt(INavigableRegion region)
        {
            if (region == null)
            {
                throw new ArgumentNullException("region", "region is null.");
            }

            AddDisposable(region.Added.Do(vm => AddView(region, vm)).Subscribe());
            AddDisposable(region.Removed.Do(vm => RemoveView(region, vm)).Subscribe());
            AddDisposable(region.Activated.Do(vm => ActivateView(region, vm)).Subscribe());
            AddDisposable(region.Activated.Do(vm => DeactivateView(region, vm)).Subscribe());
            AddDisposable(region.Initialized.Do(vm => InitializeView(region, vm)).Subscribe());

            AdaptToRegionTarget(region);
        }
        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 void Adapt(INavigableRegion region)
        {
            if (region == null)
            {
                throw new ArgumentNullException("region", "region is null.");
            }

            _disposables.Add(region.Added.Do(vm => AddViewFor(region, vm)).Subscribe());
            _disposables.Add(region.Removed.Do(vm => RemoveViewFor(vm)).Subscribe());
            _disposables.Add(region.Activated.Do(vm => ActivateViewFor(vm)).Subscribe());

            _disposables.Add(
                Observable
                .FromEventPattern <SelectionChangedEventArgs>(_regionTarget, "SelectionChanged")
                .Where(e => ReferenceEquals(e.EventArgs.OriginalSource, _regionTarget))
                .Where(_ => !_suppressSelectionChanged)
                .Where(_ => _regionTarget.SelectedItem != null)
                .Do(_ => region.RequestNavigate(LookupViewModel(_regionTarget.SelectedItem), NavigationParameters.UserNavigation))        // TODO: SelectMany?
                .Subscribe());
        }
Beispiel #10
0
 internal protected virtual void AdaptToRegionTarget(INavigableRegion region)
 {
 }
Beispiel #11
0
 internal protected abstract void InitializeView(INavigableRegion region, ReactiveViewModel viewModel);
Beispiel #12
0
 internal protected abstract void DeactivateView(INavigableRegion region, ReactiveViewModel viewModel);
Beispiel #13
0
 protected internal override void InitializeView(INavigableRegion region, ReactiveViewModel viewModel)
 {
 }
Beispiel #14
0
 protected internal override void DeactivateView(INavigableRegion region, ReactiveViewModel viewModel)
 {
 }
Beispiel #15
0
        protected internal override void AddView(INavigableRegion region, ReactiveViewModel viewModel)
        {
            var view = _cachedViews.GetOrAdd(viewModel, _viewFactory.CreateViewFor(viewModel));

            RegionTarget.Content = view;
        }