/// <summary> /// Selects the specified item. /// </summary> /// <param name="treeViewItem">The item.</param> /// <param name="unselectOthers">if set to <c>true</c> [unselect other items].</param> public void Select(VirtualTreeViewItem treeViewItem, bool unselectOthers) { if (SelectionMode == VirtualTreeViewSelectionMode.None) { return; } var item = ItemContainerGenerator.ItemFromContainer(treeViewItem); // remove other items if (unselectOthers || SelectionMode == VirtualTreeViewSelectionMode.Single) { var otherSelection = SelectedItems.Where(s => !ReferenceEquals(s, item)).ToArray(); foreach (var o in otherSelection) { SelectedItems.Remove(o); } } if (IsKeyboardFocusWithin && !treeViewItem.IsKeyboardFocusWithin) { treeViewItem.Focus(); } if (!SelectedItems.Contains(item)) { SelectedItems.Add(item); } treeViewItem.IsSelected = true; }
/// <summary> /// Gets the depth of the given item. /// This is used by binding generated items /// </summary> /// <param name="treeViewItem">The tree view item.</param> /// <returns></returns> private int GetDepth(VirtualTreeViewItem treeViewItem) { int depth = -1; // starting from -1 here, cause the dataContext below will be non-null at least once for (var dataContext = treeViewItem.DataContext; dataContext != null; dataContext = FlatItemsSource.GetParent(dataContext)) { depth++; } return(depth); }
/// <summary> /// Deselects the specified item. /// </summary> /// <param name="treeViewItem">The item.</param> public void Deselect(VirtualTreeViewItem treeViewItem) { if (!treeViewItem.IsSelected) { return; } var item = ItemContainerGenerator.ItemFromContainer(treeViewItem); SelectedItems.Remove(item); treeViewItem.IsSelected = false; }