如何在 TreeView WPF 中获取选定的 TreeViewItems

How to get Selected TreeViewItems in TreeView WPF

我正在使用递归函数填充 treeView,如代码中所示。对于每个 treeviewItem,我正在使用堆栈面板添加复选框。如下图所示正确填充了 treeView。我现在遇到的问题是获取选定的 nodes/checkboxes(更具体地说,我需要所有选定的 "TreeviewItem" 对象)。我是第一次使用树视图控件,我在谷歌上搜索了一段时间的解决方案……但没有成功。

注意:TreeView 将有大约 6000 个节点。因此,除了遍历所有复选框之外,还需要一种解决方案。

 private void button1_Click(object sender, RoutedEventArgs e)
 {
   TreeViewItem ParentNode = new TreeViewItem() { Header = stackedLook("Sub N Node 0"), IsExpanded = true };
   CreatePSTree(RootNode, ParentNode);
   treeView1.items.Add(ParentNode);
 }

 private void CreatePSTree(Product RootNode,  TreeViewItem ParentNode)
 {
      for (int i = 1; i <= RootNode.Products.Count; i++)
       {
        Product NewNode = RootNode.Products.Item(i);
        TreeViewItem NewTreeItem = new TreeViewItem() { Header = stackedLook(NewNode.get_Name()), IsExpanded = false };
        ParentNode.Items.Add(NewTreeItem);                    

        //Recursive calls for each product Node  
        CreatePSTree(NewNode, NewTreeItem);                
      }
  }

 private object stackedLook(string displayText)
   {
     // create stack panel
     StackPanel stack = new StackPanel();
     stack.Orientation = Orientation.Horizontal;

     //Add Checkbox for Node selection
      CheckBox checkBoxForNode = new CheckBox();
      checkBoxForNode.Margin = new System.Windows.Thickness(4);

      // Label displaying the Node name
      Label lbl = new Label();
      lbl.Content = displayText;
      lbl.Margin = new System.Windows.Thickness(-2);

      // Add into stack
      stack.Children.Add(checkBoxForNode);
      stack.Children.Add(lbl);

      return stack;
  }

我通过在树视图中添加新节点的所有位置添加事件处理程序以及使用可观察集合来跟踪选择和更改来解决问题

ParentNode.Selected += new RoutedEventHandler(SelectedNodeItem);

void SelectedNodeItem(object sender, RoutedEventArgs e)
 {
    TreeViewItem SelectedTreeViewItem = ((TreeViewItem)e.Source);
 }