Пример #1
0
        public static void ListenParentChange([NotNull] this View view)
        {
            Should.NotBeNull(view, "view");
            if (view.Context == null)
            {
                return;
            }
            ParentObserver.Raise(view);
            if (ServiceProvider.AttachedValueProvider.GetValue <object>(view, VisitedParentPath, false) != null)
            {
                return;
            }
            ServiceProvider.AttachedValueProvider.SetValue(view, VisitedParentPath, view);
            var parent = BindingServiceProvider.VisualTreeManager.FindParent(view) as View;

            if (parent != null)
            {
                parent.ListenParentChange();
            }

            var viewGroup = view as ViewGroup;

            if (viewGroup != null)
            {
                viewGroup.SetOnHierarchyChangeListener(GlobalViewParentListener.Instance);
                for (int i = 0; i < viewGroup.ChildCount; i++)
                {
                    viewGroup.GetChildAt(i).ListenParentChange();
                }
            }
        }
        public static void ListenParentChange([CanBeNull] this View view)
        {
            if (!view.IsAlive())
            {
                return;
            }

            ParentObserver.Raise(view);
            if (view.GetTag(Resource.Id.ListenParentChange) != null)
            {
                return;
            }
            view.SetTag(Resource.Id.ListenParentChange, GlobalViewParentListener.Instance);
            var parent = BindingServiceProvider.VisualTreeManager.FindParent(view) as View;

            if (parent != null)
            {
                parent.ListenParentChange();
            }

            var viewGroup = view as ViewGroup;

            if (viewGroup != null)
            {
                if (!viewGroup.GetBindingMemberValue(AttachedMembers.ViewGroup.DisableHierarchyListener))
                {
                    viewGroup.SetOnHierarchyChangeListener(GlobalViewParentListener.Instance);
                }
                for (int i = 0; i < viewGroup.ChildCount; i++)
                {
                    viewGroup.GetChildAt(i).ListenParentChange();
                }
            }
        }
        public virtual void ViewWillAppear(Action <bool> baseViewWillAppear, bool animated)
        {
            baseViewWillAppear(animated);

            var viewController = ViewController;

            if (viewController != null && !_isAppeared)
            {
                if (viewController.View != null)
                {
                    ParentObserver.Raise(viewController.View, true);
                }
                UINavigationItem navigationItem = viewController.NavigationItem;
                if (navigationItem != null)
                {
                    SetParent(navigationItem, viewController);
                    SetParent(navigationItem.LeftBarButtonItem, viewController);
                    SetParent(navigationItem.LeftBarButtonItems, viewController);
                    SetParent(navigationItem.RightBarButtonItem, viewController);
                    SetParent(navigationItem.RightBarButtonItems, viewController);
                }
                SetParent(viewController.EditButtonItem, viewController);
                SetParent(viewController.ToolbarItems, viewController);
                var dialogViewController = viewController as DialogViewController;
                if (dialogViewController != null)
                {
                    SetParent(dialogViewController.Root, viewController);
                }
                var viewControllers = viewController.ChildViewControllers;
                foreach (var controller in viewControllers)
                {
                    controller.TryRaiseAttachedEvent(AttachedMembers.Object.Parent);
                }

                var tabBarController = viewController as UITabBarController;
                if (tabBarController == null)
                {
                    var splitViewController = viewController as UISplitViewController;
                    viewControllers = splitViewController == null ? null : splitViewController.ViewControllers;
                }
                else
                {
                    viewControllers = tabBarController.ViewControllers;
                }

                if (viewControllers != null)
                {
                    foreach (var controller in viewControllers)
                    {
                        controller.TryRaiseAttachedEvent(AttachedMembers.Object.Parent);
                        PlatformExtensions.SetHasState(controller, false);
                    }
                }

                viewController.TryRaiseAttachedEvent(AttachedMembers.Object.Parent);
                _isAppeared = true;
            }
            Raise(ViewWillAppearHandler, animated);
        }
        public void OnChildViewAdded(View parent, View child)
        {
            ParentObserver.Raise(child);
            var viewGroup = child as ViewGroup;

            if (viewGroup != null && !viewGroup.IsDisableHierarchyListener())
            {
                viewGroup.SetOnHierarchyChangeListener(this);
            }
        }
        public void OnChildViewAdded(View parent, View child)
        {
            ParentObserver.Raise(child);
            var viewGroup = child as ViewGroup;

            if (viewGroup != null && !viewGroup.GetBindingMemberValue(AttachedMembers.ViewGroup.DisableHierarchyListener))
            {
                viewGroup.SetOnHierarchyChangeListener(this);
            }
        }
Пример #6
0
 private static void RaiseParentChanged(UIView[] items)
 {
     if (items == null)
     {
         return;
     }
     for (int index = 0; index < items.Length; index++)
     {
         ParentObserver.Raise(items[index], true);
     }
 }
Пример #7
0
            public void OnChildViewRemoved(View parent, View child)
            {
                var viewGroup = (ViewGroup)parent;

                if (viewGroup.ChildCount == 0 || viewGroup.GetChildAt(0) == child)
                {
                    var underlyingView = GetUnderlyingView(child);
                    if (underlyingView != null)
                    {
                        BindingServiceProvider.ContextManager.GetBindingContext(underlyingView).ValueChanged -= BindingContextChangedDelegate;
                    }
                    viewGroup.SetBindingMemberValue(AttachedMembers.ViewGroup.Content, RemoveViewValue);
                }
                ParentObserver.Raise(child);
            }
        public virtual void ViewWillAppear(Action <bool> baseViewWillAppear, bool animated)
        {
            baseViewWillAppear(animated);
            if (_viewController.View != null)
            {
                ParentObserver.Raise(_viewController.View, true);
            }
            UINavigationItem navigationItem = _viewController.NavigationItem;

            if (navigationItem != null)
            {
                SetParent(navigationItem);
                SetParent(navigationItem.LeftBarButtonItem);
                SetParent(navigationItem.LeftBarButtonItems);
                SetParent(navigationItem.RightBarButtonItem);
                SetParent(navigationItem.RightBarButtonItems);
            }
            SetParent(_viewController.EditButtonItem);
            SetParent(_viewController.ToolbarItems);
            var dialogViewController = _viewController as DialogViewController;

            if (dialogViewController != null)
            {
                SetParent(dialogViewController.Root);
            }
            var viewControllers = ViewController.ChildViewControllers;

            foreach (var controller in viewControllers)
            {
                BindingExtensions.AttachedParentMember.Raise(controller, EventArgs.Empty);
            }

            var tabBarController = ViewController as UITabBarController;

            if (tabBarController != null)
            {
                viewControllers = tabBarController.ViewControllers;
                if (viewControllers != null)
                {
                    foreach (var controller in viewControllers)
                    {
                        BindingExtensions.AttachedParentMember.Raise(controller, EventArgs.Empty);
                        controller.RestorationIdentifier = string.Empty;
                    }
                }
            }
            Raise(ViewWillAppearHandler, animated);
        }
Пример #9
0
        protected override void InitializeView(IViewModel viewModel, IView view)
        {
            base.InitializeView(viewModel, view);
            if (view == null)
            {
                return;
            }
            var underlyingView = view.GetUnderlyingView();
            var uiView         = underlyingView as UIView;

            if (uiView != null)
            {
                ParentObserver.Raise(uiView, true);
            }
            var dialogViewController = underlyingView as DialogViewController;

            if (dialogViewController != null && dialogViewController.Root != null)
            {
                BindingExtensions.AttachedParentMember.SetValue(dialogViewController.Root, dialogViewController);
            }
        }
Пример #10
0
            public void OnChildViewAdded(View parent, View child)
            {
                var viewGroup = (ViewGroup)parent;

                if (viewGroup.IndexOfChild(child) == 0)
                {
                    var underlyingView = GetUnderlyingView(child);
                    if (underlyingView != null)
                    {
                        var dataContext = BindingServiceProvider.ContextManager.GetBindingContext(underlyingView);
                        dataContext.ValueChanged += BindingContextChangedDelegate;
                        UpdataContext(viewGroup, underlyingView, dataContext);
                    }
                }
                ParentObserver.Raise(child);
                var childViewGroup = child as ViewGroup;

                if (childViewGroup != null && !childViewGroup.GetBindingMemberValue(AttachedMembers.ViewGroup.DisableHierarchyListener))
                {
                    childViewGroup.SetOnHierarchyChangeListener(GlobalViewParentListener.Instance);
                }
            }
Пример #11
0
 public static void RaiseParentChanged(this UIView uiView, bool recursively = true)
 {
     ParentObserver.Raise(uiView, recursively);
 }
 public void OnChildViewRemoved(View parent, View child)
 {
     ParentObserver.Raise(child);
 }