private void DropView(DependencyObject view) { DispatcherHelpers.AssertOnDispatcher(); 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); }