ExecuteOnLayoutUpdated() public static method

public static ExecuteOnLayoutUpdated ( global::Xamarin.Forms.VisualElement element, EventHandler handler ) : void
element global::Xamarin.Forms.VisualElement
handler EventHandler
return void
コード例 #1
0
        /// <summary>
        /// Executes the handler the next time the view's LayoutUpdated event fires.
        /// </summary>
        /// <param name="view">The view.</param>
        /// <param name="handler">The handler.</param>
        public virtual void ExecuteOnLayoutUpdated(object view, Action <object> handler)
        {
            var element = view as FrameworkElement;

            if (element != null)
            {
                View.ExecuteOnLayoutUpdated(element, (s, e) => handler(s));
            }
        }
コード例 #2
0
        /// <summary>
        ///   Occurs after navigation
        /// </summary>
        /// <param name="sender"> The event sender. </param>
        /// <param name="e"> The event args. </param>
        protected virtual void OnNavigated(object sender, NavigationEventArgs e)
        {
            if (e.Content == null)
            {
                return;
            }

            ViewLocator.InitializeComponent(e.Content);

            var viewModel = ViewModelLocator.LocateForView(e.Content);

            if (viewModel == null)
            {
                return;
            }

            var view = e.Content as Page;

            if (view == null)
            {
                throw new ArgumentException("View '" + e.Content.GetType().FullName + "' should inherit from Page or one of its descendents.");
            }

            if (treatViewAsLoaded)
            {
                view.SetValue(View.IsLoadedProperty, true);
            }

            TryInjectParameters(viewModel, e.Parameter);
            ViewModelBinder.Bind(viewModel, view, null);

            var activator = viewModel as IActivate;

            if (activator != null)
            {
                activator.Activate();
            }

            var viewAware = viewModel as IViewAware;

            if (viewAware != null)
            {
                View.ExecuteOnLayoutUpdated(view, (s, a) => viewAware.OnViewReady(view));
            }

            GC.Collect(); // Why?
        }
コード例 #3
0
        /// <summary>
        ///   Occurs after navigation
        /// </summary>
        /// <param name="sender"> The event sender. </param>
        /// <param name="e"> The event args. </param>
        protected virtual void OnNavigated(object sender, NavigationEventArgs e)
        {
            if (e.Uri.IsAbsoluteUri || e.Content == null)
            {
                return;
            }

            ViewLocator.InitializeComponent(e.Content);

            var viewModel = ViewModelLocator.LocateForView(e.Content);

            if (viewModel == null)
            {
                return;
            }

            var page = e.Content as PhoneApplicationPage;

            if (page == null)
            {
                throw new ArgumentException("View '" + e.Content.GetType().FullName + "' should inherit from PhoneApplicationPage or one of its descendents.");
            }

            if (treatViewAsLoaded)
            {
                page.SetValue(View.IsLoadedProperty, true);
            }

            TryInjectQueryString(viewModel, page);
            ViewModelBinder.Bind(viewModel, page, null);

            var activator = viewModel as IActivate;

            if (activator != null)
            {
                activator.Activate();
            }

            var viewAware = viewModel as IViewAware;

            if (viewAware != null)
            {
                View.ExecuteOnLayoutUpdated(page, (s, a) => viewAware.OnViewReady(page));
            }

            GC.Collect();
        }
コード例 #4
0
        /// <summary>
        ///   Occurs after navigation
        /// </summary>
        /// <param name="sender"> The event sender. </param>
        /// <param name="e"> The event args. </param>
        protected virtual void OnNavigated(object sender, NavigationEventArgs e)
        {
            if (e.Uri.IsAbsoluteUri || e.Content == null)
            {
                return;
            }

            ViewLocator.InitializeComponent(e.Content);

            // Do not use LocateForView because Frame control already has its
            // parent's DataContext. Use LocateForViewType instead.
            var viewModel = ViewModelLocator.LocateForViewType(e.Content.GetType());

            //var viewModel = ViewModelLocator.LocateForView(e.Content);
            if (viewModel == null)
            {
                if (System.Diagnostics.Debugger.IsAttached)
                {
                    var msg = "'" + e.Content.GetType().FullName + "' must be registered in the bootstrapper (or INavigationService might never get injected)";
                    var exc = new InvalidOperationException(msg);
                    LogManager.GetLog(typeof(FrameAdapter)).Error(exc);
                    throw exc;
                }
                return;
            }

            // Inject dependency properties
            IoC.BuildUp(viewModel);

#if WINDOWS_PHONE
            var page = e.Content as PhoneApplicationPage;
#else
            var page = e.Content as Page;
#endif
            if (page == null)
            {
                throw new ArgumentException("View '" + e.Content.GetType().FullName + "' should inherit from PhoneApplicationPage or one of its descendents.");
            }

            if (treatViewAsLoaded)
            {
                page.SetValue(View.IsLoadedProperty, true);
            }

            TryInjectQueryString(viewModel, page);
            ViewModelBinder.Bind(viewModel, page, null);

            var activator = viewModel as IActivate;
            if (activator != null)
            {
                activator.Activate();
            }

#if WINDOWS_PHONE || WinRT
            var page      = e.Content as PhoneApplicationPage;
            var viewAware = viewModel as IViewAware;
            if (viewAware != null)
            {
                View.ExecuteOnLayoutUpdated(page, (s, a) => viewAware.OnViewReady(page));
            }
#endif

            GC.Collect();
        }