protected virtual void HandleOpenedViewModels(INavigationContext context) { var viewModelFrom = context.GetData(NavigationConstants.DoNotTrackViewModelFrom) ? null : context.ViewModelFrom; var viewModelTo = context.GetData(NavigationConstants.DoNotTrackViewModelTo) ? null : context.ViewModelTo; lock (_openedViewModels) { List <WeakReference> list; if (!_openedViewModels.TryGetValue(context.NavigationType, out list)) { list = new List <WeakReference>(); _openedViewModels[context.NavigationType] = list; } if (context.NavigationMode == NavigationMode.New && viewModelTo != null) { list.Add(ServiceProvider.WeakReferenceFactory(viewModelTo)); } else if ((context.NavigationMode == NavigationMode.Refresh || context.NavigationMode == NavigationMode.Back) && viewModelTo != null) { WeakReference viewModelRef = null; for (int i = 0; i < list.Count; i++) { var target = list[i].Target as IViewModel; if (target == null || ReferenceEquals(target, viewModelTo)) { if (target != null) { viewModelRef = list[i]; } list.RemoveAt(i); --i; } } if (viewModelRef == null) { viewModelRef = ServiceProvider.WeakReferenceFactory(viewModelTo); } list.Add(viewModelRef); } if (context.NavigationMode.IsClose() && viewModelFrom != null) { for (int i = 0; i < list.Count; i++) { var target = list[i].Target as IViewModel; if (target == null || ReferenceEquals(target, viewModelFrom)) { list.RemoveAt(i); --i; } } } } }
protected virtual void HandleOpenedViewModels(INavigationContext context) { var viewModelFrom = context.GetData(NavigationConstants.DoNotTrackViewModelFrom) ? null : context.ViewModelFrom; var viewModelTo = context.GetData(NavigationConstants.DoNotTrackViewModelTo) ? null : context.ViewModelTo; lock (OpenedViewModels) { List <WeakOpenedViewModelInfo> list; if (!OpenedViewModels.TryGetValue(context.NavigationType, out list)) { list = new List <WeakOpenedViewModelInfo>(); OpenedViewModels[context.NavigationType] = list; } if (viewModelTo != null && (context.NavigationMode == NavigationMode.Refresh || context.NavigationMode == NavigationMode.Back || context.NavigationMode == NavigationMode.New)) { WeakOpenedViewModelInfo viewModelRef = null; for (int i = 0; i < list.Count; i++) { var target = list[i].ViewModel; if (target == null || ReferenceEquals(target, viewModelTo)) { if (target != null) { viewModelRef = list[i]; } list.RemoveAt(i); --i; } } if (viewModelRef == null) { viewModelRef = new WeakOpenedViewModelInfo(viewModelTo, context.NavigationProvider, context.NavigationType); } list.Add(viewModelRef); } if (viewModelFrom != null && context.NavigationMode.IsClose()) { for (int i = 0; i < list.Count; i++) { var target = list[i].ViewModel; if (target == null || ReferenceEquals(target, viewModelFrom)) { list.RemoveAt(i); --i; } } } } }
protected virtual void OnNavigatedInternal(INavigationContext context) { (context.ViewModelFrom as INavigableViewModel)?.OnNavigatedFrom(context); (context.ViewModelTo as INavigableViewModel)?.OnNavigatedTo(context); if (context.NavigationMode.IsClose() && context.ViewModelFrom != null) { OnClosed(context.ViewModelFrom, context); if (context.NavigationType.Operation != null && !context.GetData(NavigationConstants.SuppressNavigationCallbackOnClose)) { var operationResult = OperationResult.CreateResult <object>(context.NavigationType.Operation, context.ViewModelFrom, null, context); CallbackManager.SetResult(operationResult); } } }
private void UpdateNavigationContext(NavigationEventArgsBase args, ref INavigationContext context) { var vmType = context.GetData(ViewModelTypeConstant); if (vmType == null) { return; } var viewModel = GetViewModelForView(args, context.ViewModelTo, context, vmType); if (!ReferenceEquals(context.ViewModelTo, viewModel)) { context = new NavigationContext(NavigationType.Page, context.NavigationMode, context.ViewModelFrom, viewModel, context.NavigationProvider, args.Context); } }
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); } }
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); }