Exemple #1
0
        /// <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)
 {
 }
Exemple #7
0
 /// <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));
 }