protected virtual INavigationContext CreateContextNavigateTo(NavigationEventArgsBase args) { IViewModel viewModelFrom = null, viewModelTo = null; if (args.NavigationMode.IsClose()) { viewModelFrom = args.Context.GetData(NavigationConstants.ViewModel); } else { viewModelTo = args.Context.GetData(NavigationConstants.ViewModel); } if (viewModelFrom == null) { viewModelFrom = CurrentViewModel; } if (args.NavigationMode == NavigationMode.Remove) { if (viewModelFrom != null) { return(new NavigationContext(NavigationType.Page, NavigationMode.Remove, viewModelFrom, null, this, args.Context)); } Tracer.Error("Possible bug in navigation, navigate with mode Remove mode without ViewModel"); } Guid viewModelId; var vmType = GetViewModelTypeFromParameter(args.Parameter, out viewModelId); if (viewModelTo == null && vmType != null) { viewModelTo = ViewModelProvider.TryGetViewModelById(viewModelId); } if (vmType == null) { if (args.Content != null) { var items = ViewMappingProvider.FindMappingsForView(args.Content.GetType(), false); if (items.Count == 1) { var type = items[0].ViewModelType; #if WINDOWS_UWP || XAMARIN_FORMS if (!type.GetTypeInfo().IsGenericTypeDefinition) #else if (!type.IsGenericTypeDefinition) #endif { vmType = type; } } } if (vmType == null) { return(new NavigationContext(NavigationType.Page, args.NavigationMode, viewModelFrom, viewModelTo, this, args.Context)); } } return(new NavigationContext(NavigationType.Page, args.NavigationMode, viewModelFrom, viewModelTo, this, args.Context) { { ViewModelTypeConstant, vmType } }); }
protected virtual void NavigationServiceOnNavigated(object sender, NavigationEventArgsBase e) { string idOperation = null; try { var context = CreateContextNavigateTo(CurrentViewModel, e); idOperation = context.GetData(OperationIdConstant); IOperationCallback callback = null; if (idOperation == _currentOperationId) { callback = _currentCallback; _currentCallback = null; _navigationTargetVm = null; _lastContext = null; } UpdateNavigationContext(callback, context.ViewModelTo, e, ref context); OnNavigated(context); } finally { if (idOperation == _currentOperationId) { _currentOperationId = null; var tcs = _navigatedTcs; if (tcs != null) { _navigatedTcs = null; tcs.TrySetResult(null); } } } }
public virtual void OnNavigated(NavigationEventArgsBase e) { EventHandler <INavigationService, NavigationEventArgsBase> handler = Navigated; if (handler != null) { handler(this, e); } }
/// <summary> /// Subscriber to the Navigated event. /// </summary> protected virtual void NavigationServiceOnNavigated(object sender, NavigationEventArgsBase e) { var callback = _currentCallback; var vm = _navigationTargetVm; var context = CreateContextNavigateTo(CurrentViewModel, vm, e); UpdateNavigationContext(callback, vm, e, ref context); OnNavigated(context); }
private void RaiseNavigated(NavigationEventArgsBase args) { var navigated = Navigated; if (navigated != null) { navigated(this, args); } }
private void RaiseNavigated(NavigationEventArgsBase args) { var handler = Navigated; if (handler != null) { handler(this, args); } }
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 NavigationServiceOnNavigated(object sender, NavigationEventArgsBase args) { try { if (!args.Context.Contains(NavigatedTaskConstant) && _unobservedNavigationTcs == null) { _unobservedNavigationTcs = new TaskCompletionSource <bool>(); } var context = CreateContextNavigateTo(args); UpdateNavigationContext(args, ref context); OnNavigated(context); } finally { TryCompleteNavigationTask(args.Context, true); } }
protected virtual IViewModel GetViewModelForView([NotNull] NavigationEventArgsBase args, [CanBeNull] IViewModel navigationViewModel, [NotNull] INavigationContext context, [NotNull] Type vmType) { var view = args.Content; if (navigationViewModel != null) { ViewManager.InitializeViewAsync(navigationViewModel, view, context).WithTaskExceptionHandler(this); return(navigationViewModel); } IViewModel vm = null; if (CachePolicy != null) { vm = CachePolicy.TryTakeViewModelFromCache(context, view); } if (HasViewModel(view, vmType)) { return((IViewModel)MugenMvvmToolkit.Infrastructure.ViewManager.GetDataContext(view)); } if (vm == null) { IDataContext viewModelState = null; #if WINDOWS_UWP viewModelState = PlatformExtensions.GetViewModelState(view); if (viewModelState != null) { PlatformExtensions.SetViewModelState(view, null); } #endif vm = ViewModelProvider.RestoreViewModel(viewModelState, new DataContext { { InitializationConstants.ViewModelType, vmType } }, true); } if (vm != null) { ViewManager.InitializeViewAsync(vm, view, context).WithTaskExceptionHandler(this); } return(vm); }
protected virtual IViewModel GetViewModelForView([NotNull] NavigationEventArgsBase args, [CanBeNull] IViewModel navigationViewModel, [NotNull] INavigationContext context, [NotNull] Type vmType) { var view = args.Content; if (navigationViewModel != null) { ViewManager.InitializeViewAsync(navigationViewModel, view, context); return(navigationViewModel); } if (HasViewModel(view, vmType)) { return((IViewModel)ToolkitExtensions.GetDataContext(view)); } IDataContext viewModelState = null; #if WINDOWS_UWP viewModelState = UwpToolkitExtensions.GetViewModelState(view); if (viewModelState != null) { UwpToolkitExtensions.SetViewModelState(view, null); } #endif var vm = ViewModelProvider.RestoreViewModel(viewModelState, new DataContext { { InitializationConstants.ViewModelType, vmType } }, true); if (vm != null) { ViewManager.InitializeViewAsync(vm, view, context); if (viewModelState == null && !vm.Settings.Metadata.GetData(NavigationConstants.DoNotDisposeNoStateViewModel)) { vm.RegisterNavigationOperation(OperationType.PageNavigation, context) .ContinueWith <IViewModel>((viewModel, result) => viewModel.Dispose()); } } return(vm); }
protected virtual IViewModel GetViewModelForView([NotNull] NavigationEventArgsBase args, [CanBeNull] IViewModel navigationViewModel, [NotNull] INavigationContext context, [NotNull] Type vmType) { var view = args.Content; if (navigationViewModel != null) { ViewManager.InitializeViewAsync(navigationViewModel, view).WithTaskExceptionHandler(this); return(navigationViewModel); } //Trying to get from cache. IViewModel vm = TryTakeViewModelFromCache(context, view); if (HasViewModel(view, vmType)) { return((IViewModel)ViewManagerEx.GetDataContext(view)); } if (vm == null) { IDataContext viewModelState = null; #if WINDOWS_PHONE || NETFX_CORE || WINDOWSCOMMON viewModelState = PlatformExtensions.GetViewModelState(view); if (viewModelState != null) { PlatformExtensions.SetViewModelState(view, null); } #endif vm = ViewModelProvider.RestoreViewModel(viewModelState, new DataContext { { InitializationConstants.ViewModelType, vmType } }, false); } if (vm != null) { ViewManager.InitializeViewAsync(vm, view).WithTaskExceptionHandler(this); } return(vm); }
protected virtual IViewModel GetViewModelForView([NotNull] NavigationEventArgsBase args, [CanBeNull] IViewModel navigationViewModel, [NotNull] INavigationContext context, [NotNull] Type vmType) { var view = args.Content; if (navigationViewModel != null) { ViewManager.InitializeViewAsync(navigationViewModel, view, context); return(navigationViewModel); } if (HasViewModel(view, vmType)) { return((IViewModel)ToolkitExtensions.GetDataContext(view)); } IDataContext viewModelState = null; #if WINDOWS_UWP viewModelState = UwpToolkitExtensions.GetViewModelState(view); if (viewModelState != null) { UwpToolkitExtensions.SetViewModelState(view, null); } #endif var vm = ViewModelProvider.RestoreViewModel(viewModelState, new DataContext { { InitializationConstants.ViewModelType, vmType } }, true); if (vm != null) { ViewManager.InitializeViewAsync(vm, view, context); } return(vm); }
private void RaiseNavigated(NavigationEventArgsBase args) { Navigated?.Invoke(this, args); }
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); } }
protected virtual INavigationContext CreateContextNavigateTo(IViewModel viewModelFrom, NavigationEventArgsBase args) { string idOperation; var vmType = GetViewModelTypeFromParameter(NavigationService.GetParameterFromArgs(args), out idOperation); var viewModelTo = idOperation == _currentOperationId ? _navigationTargetVm : null; if (vmType == null) { if (args.Content != null) { var items = _mappingProvider.FindMappingsForView(args.Content.GetType(), false); if (items.Count == 1) { var type = items[0].ViewModelType; #if WINDOWSCOMMON || XAMARIN_FORMS if (!type.GetTypeInfo().IsGenericTypeDefinition) #else if (!type.IsGenericTypeDefinition) #endif { vmType = type; } } } if (vmType == null) { return new NavigationContext(NavigationType.Page, args.Mode, viewModelFrom, viewModelTo, this) { { NavigationArgsConstant, args }, { OperationIdConstant, idOperation } } } ; } return(new NavigationContext(NavigationType.Page, args.Mode, viewModelFrom, viewModelTo, this) { { NavigationArgsConstant, args }, { ViewModelTypeConstant, vmType }, { OperationIdConstant, idOperation } }); }
protected virtual INavigationContext CreateContextNavigateTo(IViewModel viewModelFrom, IViewModel viewModelTo, NavigationEventArgsBase args) { IDataContext parameters; var vmType = GetViewModelTypeFromParameter(NavigationService.GetParameterFromArgs(args), out parameters); if (vmType == null) { if (args.Content != null) { var items = _mappingProvider.FindMappingsForView(args.Content.GetType(), false); if (items.Count == 1) { var type = items[0].ViewModelType; #if NETFX_CORE || WINDOWSCOMMON || XAMARIN_FORMS if (!type.GetTypeInfo().IsGenericTypeDefinition) #else if (!type.IsGenericTypeDefinition) #endif { vmType = type; } } } if (vmType == null) { return(new NavigationContext(args.Mode, viewModelFrom, viewModelTo, this, parameters)); } } return(new NavigationContext(args.Mode, viewModelFrom, viewModelTo, this, parameters) { { NavigationArgsConstant, args }, { ViewModelType, vmType } }); }
public virtual void OnNavigated(NavigationEventArgsBase e) { Navigated?.Invoke(this, e); }