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); } } }
protected internal override void ActivateView(INavigableRegion region, ReactiveViewModel viewModel) { object view; if (_cachedViews.TryGetValue(viewModel, out view)) { RegionTarget.Content = view; } }
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); } }
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()); }
protected internal override void ActivateView(INavigableRegion region, ReactiveViewModel viewModel) { try { _suppressSelectionChanged = true; RegionTarget.SelectedItem = viewModel; } finally { _suppressSelectionChanged = false; } }
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 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()); }
internal protected virtual void AdaptToRegionTarget(INavigableRegion region) { }
internal protected abstract void InitializeView(INavigableRegion region, ReactiveViewModel viewModel);
internal protected abstract void DeactivateView(INavigableRegion region, ReactiveViewModel viewModel);
protected internal override void InitializeView(INavigableRegion region, ReactiveViewModel viewModel) { }
protected internal override void DeactivateView(INavigableRegion region, ReactiveViewModel viewModel) { }
protected internal override void AddView(INavigableRegion region, ReactiveViewModel viewModel) { var view = _cachedViews.GetOrAdd(viewModel, _viewFactory.CreateViewFor(viewModel)); RegionTarget.Content = view; }