コード例 #1
0
 private void SetStateForChildren(CheckableTreeItem item, bool?state)
 {
     foreach (var child in item.Children)
     {
         child.IsChecked = state;
         SetStateForChildren(child, state);
     }
 }
コード例 #2
0
        public static IEnumerable <CheckableTreeItem> GetChildSelectedItems(CheckableTreeItem treeItem)
        {
            var childSelectedItems = new List <CheckableTreeItem>();

            foreach (var checkableTreeItem in treeItem.Children.Where(item => !item.IsChecked.HasValue || item.IsChecked.Value))
            {
                childSelectedItems.Add(checkableTreeItem);
                childSelectedItems.AddRange(GetChildSelectedItems(checkableTreeItem));
            }

            return(childSelectedItems);
        }
コード例 #3
0
        private void UpdateParentState(CheckableTreeItem item)
        {
            if (item.ParentItem == null)
            {
                return;
            }

            bool?parentState = item.IsChecked;

            if (item.ParentItem.Children.Any(child => parentState != child.IsChecked))
            {
                parentState = null;
            }

            item.ParentItem.IsChecked = parentState;

            // update next parent state
            UpdateParentState(item.ParentItem);
        }
コード例 #4
0
        private TreeViewItem BuildTreeViewItem(CheckableTreeItem treeItem)
        {
            // create header with checkBox
            var header = new CheckBox()
            {
                Content      = treeItem.Description,
                IsThreeState = false,
                Margin       = new Thickness(2)
            };

            BindingOperations.SetBinding(header, System.Windows.Controls.CheckBox.IsCheckedProperty, new Binding("IsChecked")
            {
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Mode = BindingMode.TwoWay,
                NotifyOnTargetUpdated = true
            });
            header.Click += (sender, args) =>
            {
                SetStateForChildren(treeItem, header.IsChecked);
                UpdateParentState(treeItem);
                selectionChanged = true;
                // update commands
                (SaveCommand as Command).ValidateCanExecute();
            };

            // create main item
            var treeViewItem = new TreeViewItem()
            {
                DataContext = treeItem,
                Header      = header,
                IsExpanded  = true
            };

            // add child items
            foreach (var childTreeItem in treeItem.Children)
            {
                treeViewItem.Items.Add(BuildTreeViewItem(childTreeItem));
            }

            return(treeViewItem);
        }