Пример #1
0
        private void SelectWithShift(TreeViewExItem item)
        {
            object firstSelectedItem;

            if (lastShiftRoot != null)
            {
                firstSelectedItem = lastShiftRoot;
            }
            else
            {
                // Get the first item in the SelectedItems that is also bound to the Tree.
                firstSelectedItem = treeViewEx.SelectedItems.Cast <object>().FirstOrDefault((x) => { return(treeViewEx.GetTreeViewItemFor(x) != null); });
            }

            if (firstSelectedItem != null)
            {
                TreeViewExItem shiftRootItem = treeViewEx.GetTreeViewItemsFor(new List <object> {
                    firstSelectedItem
                }).First();

                List <object> itemsToSelect   = treeViewEx.GetNodesToSelectBetween(shiftRootItem, item).Select(x => x.DataContext).ToList();
                List <object> itemsToUnSelect = treeViewEx.SelectedItems.Cast <object>().ToList();

                ModifySelection(itemsToSelect, itemsToUnSelect);
            }
            else
            {   // Fall-back to sigle selection
                List <object> itemsToUnSelect = treeViewEx.SelectedItems.Cast <object>().ToList();
                if (itemsToUnSelect.Contains(item.DataContext))
                {
                    itemsToUnSelect.Remove(item.DataContext);
                }
                ModifySelection(item.DataContext, itemsToUnSelect);
            }
        }