System.Windows.Controls.SelectionMultiple.SelectCore C# (CSharp) Метод

SelectCore() публичный Метод

public SelectCore ( MultiSelectTreeViewItem item ) : bool
item MultiSelectTreeViewItem
Результат bool
        public bool SelectCore(MultiSelectTreeViewItem item)
        {
            if (IsControlKeyDown)
            {
                if (!treeView.SelectedItems.Contains(item.DataContext))
                {
                    treeView.SelectedItems.Add(item.DataContext);
                }
                lastShiftRoot = item.DataContext;
            }
            else if (IsShiftKeyDown && treeView.SelectedItems.Count > 0)
            {
                object firstSelectedItem = lastShiftRoot ?? treeView.SelectedItems.First();
                MultiSelectTreeViewItem shiftRootItem = treeView.GetTreeViewItemsFor(new List<object> { firstSelectedItem }).First();

                var newSelection = treeView.GetNodesToSelectBetween(shiftRootItem, item).Select(n => n.DataContext).ToList();
                // Make a copy of the list because we're modifying it while enumerating it
                var selectedItems = new object[treeView.SelectedItems.Count];
                treeView.SelectedItems.CopyTo(selectedItems, 0);
                // Remove all items no longer selected
                foreach (var selItem in selectedItems.Where(i => !newSelection.Contains(i)))
                {
                    var e = new PreviewSelectionChangedEventArgs(false, selItem);
                    OnPreviewSelectionChanged(e);
                    if (e.CancelAll)
                    {
                        FocusHelper.Focus(item);
                        return false;
                    }
                    if (!e.CancelThis)
                    {
                        treeView.SelectedItems.Remove(selItem);
                    }
                }
                // Add new selected items
                foreach (var newItem in newSelection.Where(i => !selectedItems.Contains(i)))
                {
                    var e = new PreviewSelectionChangedEventArgs(true, newItem);
                    OnPreviewSelectionChanged(e);
                    if (e.CancelAll)
                    {
                        FocusHelper.Focus(item, true);
                        return false;
                    }
                    if (!e.CancelThis)
                    {
                        treeView.SelectedItems.Add(newItem);
                    }
                }
            }
            else
            {
                if (treeView.SelectedItems.Count > 0)
                {
                    foreach (var selItem in new ArrayList(treeView.SelectedItems))
                    {
                        var e2 = new PreviewSelectionChangedEventArgs(false, selItem);
                        OnPreviewSelectionChanged(e2);
                        if (e2.CancelAll)
                        {
                            FocusHelper.Focus(item);
                            lastShiftRoot = item.DataContext;
                            return false;
                        }
                        if (!e2.CancelThis)
                        {
                            treeView.SelectedItems.Remove(selItem);
                        }
                    }
                }

                var e = new PreviewSelectionChangedEventArgs(true, item.DataContext);
                OnPreviewSelectionChanged(e);
                if (e.CancelAny)
                {
                    FocusHelper.Focus(item, true);
                    lastShiftRoot = item.DataContext;
                    return false;
                }

                treeView.SelectedItems.Add(item.DataContext);
                lastShiftRoot = item.DataContext;
            }

            FocusHelper.Focus(item, true);
            return true;
        }