internal ExplorerTreeViewItem GetTreeViewItem(ExplorerEFElement explorerElement, bool returnAncestorTreeViewItemIfNotAvailable) { if (explorerElement == null) { return(null); } var treeViewItem = ExplorerTreeRoot; // need to Skip() the ExplorerRootNode because it is not the DataContext for any UI Element in the tree foreach (var item in explorerElement.SelfAndAncestors().Reverse().Skip(1)) { //Note: if the ItemContainerGenerator status is NotStarted, the UI Element is not created yet. //This causes ContainerFromItem call returns NULL. if (treeViewItem.ItemContainerGenerator.Status == GeneratorStatus.NotStarted) { treeViewItem.UpdateLayout(); } var childTreeViewItem = (ExplorerTreeViewItem)treeViewItem.ItemContainerGenerator.ContainerFromItem(item); if (childTreeViewItem == null) { if (returnAncestorTreeViewItemIfNotAvailable) { return(treeViewItem); } else { treeViewItem = null; break; } } else { treeViewItem = childTreeViewItem; } } Debug.Assert(treeViewItem == null || treeViewItem.DataContext == explorerElement); return(treeViewItem); }
internal ExplorerTreeViewItem GetTreeViewItem(ExplorerEFElement explorerElement, bool returnAncestorTreeViewItemIfNotAvailable) { if (explorerElement == null) { return null; } var treeViewItem = ExplorerTreeRoot; // need to Skip() the ExplorerRootNode because it is not the DataContext for any UI Element in the tree foreach (var item in explorerElement.SelfAndAncestors().Reverse().Skip(1)) { //Note: if the ItemContainerGenerator status is NotStarted, the UI Element is not created yet. //This causes ContainerFromItem call returns NULL. if (treeViewItem.ItemContainerGenerator.Status == GeneratorStatus.NotStarted) { treeViewItem.UpdateLayout(); } var childTreeViewItem = (ExplorerTreeViewItem)treeViewItem.ItemContainerGenerator.ContainerFromItem(item); if (childTreeViewItem == null) { if (returnAncestorTreeViewItemIfNotAvailable) { return treeViewItem; } else { treeViewItem = null; break; } } else { treeViewItem = childTreeViewItem; } } Debug.Assert(treeViewItem == null || treeViewItem.DataContext == explorerElement); return treeViewItem; }