/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="view"></param> /// <param name="target"></param> public override void OnNavigateTo(NavigatorPluginContext context, object view, object target) { var parameters = context.LoadOr(GetType(), default(Dictionary <string, object>)); if (parameters != null) { ApplyImportParameters(target, parameters); } }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="view"></param> /// <param name="target"></param> public override void OnDispose(NavigatorPluginContext context, object view, object target) { foreach (var member in cache.GetAttributeMembers(target.GetType())) { var key = member.Attribute.Key ?? member.MemberType.FullName; Reference reference; if (!store.TryGetValue(key, out reference)) { continue; } reference.Counter--; if (reference.Counter != 0) { continue; } (reference.Context as IViewContextSupport)?.Cleanup(); store.Remove(key); } }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="view"></param> /// <param name="target"></param> public override void OnCreate(NavigatorPluginContext context, object view, object target) { foreach (var member in cache.GetAttributeMembers(target.GetType())) { var key = member.Attribute.Key ?? member.MemberType.FullName; Reference reference; if (!store.TryGetValue(key, out reference)) { reference = new Reference { Context = context.Factory.Create(member.Attribute.Context ?? member.MemberType) }; (reference.Context as IViewContextSupport)?.Initilize(); store[key] = reference; } reference.Counter++; member.SetValue(target, reference.Context); } }
/// <summary> /// /// </summary> /// <param name="id"></param> public void Forward(object id) { Type type; if (!idToViewType.TryGetValue(id, out type)) { return; } var navigationContext = new NavigatingContext { PreviousViewId = CurrentViewId, PreviousView = CurrentView, PreviousTarget = CurrentTarget, ViewId = id }; var pluginContext = new NavigatorPluginContext(Factory); // From if (navigationContext.PreviousView != null) { (Provider.ResolveEventTarget(navigationContext.PreviousView) as IViewEventSupport)?.OnViewNavigateFrom(navigationContext); foreach (var plugin in Plugins) { plugin.OnNavigateFrom(pluginContext, navigationContext.PreviousView, navigationContext.PreviousTarget); } } // Create var view = Factory.Create(type); var target = Provider.ResolveEventTarget(view); foreach (var plugin in Plugins) { plugin.OnCreate(pluginContext, view, target); } // Update navigationContext.View = view; navigationContext.Target = target; CurrentViewId = id; CurrentView = view; CurrentTarget = target; // Injection var aware = navigationContext.Target as INavigatorAware; if (aware != null) { aware.Navigator = this; } // Event Navigating?.Invoke(this, new NavigatingEventArgs { Context = navigationContext }); // Switch Provider.ViewSwitch(view); // To foreach (var plugin in Plugins) { plugin.OnNavigateTo(pluginContext, CurrentView, CurrentTarget); } (navigationContext.Target as IViewEventSupport)?.OnViewNavigateTo(navigationContext); // Dispose Old if (navigationContext.PreviousView != null) { foreach (var plugin in Plugins) { plugin.OnDispose(pluginContext, navigationContext.PreviousView, navigationContext.PreviousTarget); } Provider.ViewDispose(navigationContext.PreviousView); (navigationContext.PreviousView as IDisposable)?.Dispose(); (navigationContext.PreviousTarget as IDisposable)?.Dispose(); } }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="view"></param> /// <param name="target"></param> public virtual void OnNavigateTo(NavigatorPluginContext context, object view, object target) { }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="view"></param> /// <param name="target"></param> public virtual void OnDispose(NavigatorPluginContext context, object view, object target) { }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="view"></param> /// <param name="target"></param> public override void OnNavigateFrom(NavigatorPluginContext context, object view, object target) { context.Save(GetType(), GatherExportParameters(target)); }