private void UpdateNavigationContext(IOperationCallback callback, IViewModel navigationViewModel, NavigationEventArgsBase args, ref INavigationContext context) { var vmType = context.GetData(ViewModelType); if (vmType == null) { return; } var viewModel = GetViewModelForView(args, navigationViewModel, context, vmType); if (!ReferenceEquals(context.ViewModelTo, viewModel)) { context = new NavigationContext(context.NavigationMode, context.ViewModelFrom, viewModel, context.NavigationProvider, context.Parameters); } if (viewModel != null && callback != null) { RegisterOperationCallback(viewModel, callback, context); } }
private void OnSelectedItemChangedInternal(IViewModel oldValue, IViewModel newValue) { ISelectable selectable; INavigableViewModel navigableViewModel; NavigationContext ctx = null; if (ItemsSource.Contains(oldValue)) { selectable = oldValue as ISelectable; if (selectable != null) selectable.IsSelected = false; navigableViewModel = oldValue as INavigableViewModel; if (navigableViewModel != null) { ctx = new NavigationContext(NavigationType.Tab, NavigationMode.Refresh, oldValue, newValue, this); navigableViewModel.OnNavigatedFrom(ctx); } } selectable = newValue as ISelectable; if (selectable != null) selectable.IsSelected = true; navigableViewModel = newValue as INavigableViewModel; if (navigableViewModel != null) navigableViewModel.OnNavigatedTo(ctx ?? new NavigationContext(NavigationType.Tab, NavigationMode.Refresh, oldValue, newValue, this)); OnSelectedItemChanged(oldValue, newValue); if (SelectedItemChanged == null) return; var args = new SelectedItemChangedEventArgs<IViewModel>(oldValue, newValue); ThreadManager.Invoke(Settings.EventExecutionMode, this, args, (model, eventArgs) => { model.SelectedItemChanged?.Invoke(model, eventArgs); }); }
protected virtual void MultiViewModelOnViewModelClosed(object sender, ValueEventArgs<IViewModel> args) { var context = new NavigationContext(NavigationType.Tab, NavigationMode.Back, args.Value, MultiViewModel.SelectedItem, MultiViewModel); bool? result = null; var hasOperationResult = args.Value as IHasOperationResult; if (hasOperationResult != null) result = hasOperationResult.OperationResult; CallbackManager.SetResult(args.Value, OperationResult.CreateResult(OperationType.TabNavigation, args.Value, result, context)); }
private void ClearCacheIfNeed(IDataContext context, IViewModel viewModelTo) { if (!context.GetData(ClearNavigationCache) || CachePolicy == null) return; var viewModels = CachePolicy.Invalidate(context); foreach (var viewModelFrom in viewModels.Reverse()) { var navigationContext = new NavigationContext(NavigationType.Page, NavigationMode.Reset, viewModelFrom, viewModelTo, this); if (!OnViewModelClosed(viewModelFrom, navigationContext, this, true)) CompleteOperationCallback(viewModelFrom, navigationContext); } }
private void UpdateNavigationContext(IOperationCallback callback, IViewModel navigationViewModel, NavigationEventArgsBase args, ref INavigationContext context) { var vmType = context.GetData(ViewModelTypeConstant); if (vmType == null) return; var viewModel = GetViewModelForView(args, navigationViewModel, context, vmType); if (!ReferenceEquals(context.ViewModelTo, viewModel)) context = new NavigationContext(NavigationType.Page, context.NavigationMode, context.ViewModelFrom, viewModel, context.NavigationProvider); if (viewModel != null && callback != null) RegisterOperationCallback(viewModel, callback, context); }
/// <summary> /// Raised after the view model navigation. /// </summary> /// <param name="viewModel">The specified view model.</param> /// <param name="mode">The specified navigation mode.</param> /// <param name="context">The specified <see cref="IDataContext" />.</param> public virtual void OnNavigated(IViewModel viewModel, NavigationMode mode, IDataContext context) { Should.NotBeNull(viewModel, "viewModel"); var navigationContext = new NavigationContext(NavigationType.Page, mode, CurrentViewModel, viewModel, this); var currentViewModel = CurrentViewModel; if (currentViewModel != null) TryCacheViewModel(navigationContext, CurrentContent ?? currentViewModel.Settings.Metadata.GetData(ViewModelConstants.View), currentViewModel); OnNavigated(navigationContext); }
protected virtual void MultiViewModelOnViewModelClosed(object sender, ValueEventArgs<IViewModel> args) { var context = new NavigationContext(NavigationType.Tab, NavigationMode.Back, args.Value, MultiViewModel.SelectedItem, MultiViewModel); var result = ViewModelExtensions.GetOperationResult(args.Value); CallbackManager.SetResult(OperationResult.CreateResult(OperationType.TabNavigation, args.Value, result, context)); }