Exemplo n.º 1
0
        private void DropView(DependencyObject view)
        {
            AssertOnCorrectDispatcher();

            var tag = view.GetTag();

            if (!_rootTags.ContainsKey(tag))
            {
                // For non-root views, we notify the view manager with `OnDropViewInstance`
                var mgr = ResolveViewManager(tag);
                mgr.OnDropViewInstance(view.GetReactContext(), view);
            }

            var viewManager = default(IViewManager);

            if (_tagsToViewManagers.TryGetValue(tag, out viewManager))
            {
                var viewParentManager = viewManager as IViewParentManager;
                if (viewParentManager != null)
                {
                    for (var i = viewParentManager.GetChildCount(view) - 1; i >= 0; --i)
                    {
                        var child        = viewParentManager.GetChildAt(view, i);
                        var managedChild = default(DependencyObject);
                        if (_tagsToViews.TryGetValue(child.GetTag(), out managedChild))
                        {
                            DropView(managedChild);
                        }
                    }

                    viewParentManager.RemoveAllChildren(view);
                }
            }

            _tagsToViews.Remove(tag);
            _tagsToViewManagers.Remove(tag);
            view.ClearData();

            _deletedTagsBatchReporter.Report(tag);
        }