2011-04-07 72 views
0

我真的不能摆脱这一个。C#帮助treeview和复选框内容

我在treeview中得到了treeview项。树视图项目包含带有内容的复选框。我如何获取内容并将其放入列表中。 目前我得到这个

 foreach (TreeViewItem item in treeView1.Items) 
     { 


      foreach (TreeViewItem childItem in item.Items) 
      { 


       CheckBox checkBoxTemp = childItem.Header as CheckBox; 

       if (checkBoxTemp == null) continue; 

       optieListBox.Items.Add(checkBoxTemp.Content); 
      } 



     } 
+0

这是的WinForms或WPF? – 2011-04-07 14:11:54

+0

从treeView1.Items猜测,它是WPF。 – 2011-04-07 14:18:15

回答

0

我不知道如果我正确地得到您的问题,但你可以试试这个。

 foreach (TreeViewItem childItem in item.Items) 
     { 
      CheckBox cbx = null; 
      //finds first checkbox 
      foreach(object child in childItem.Items){ 
       cbx = child as CheckBox; 
       if (cbx != null) break; 
      } 

      ctrList.Items.Add(cbx.Content); 
     } 
+0

无法正常工作获取错误 – bubye 2011-04-07 14:41:00

+0

添加更多信息。你的XAML文件是怎样的? – 2011-04-08 07:40:33

0

将您的TreeView绑定到一个集合。这样你就不必操纵UI组件来访问数据,你将直接访问数据。

另一种方法是通过递归:在类级声明optieListBox列表并调用GetContainers()方法作为入口点调用。 optieListBox列表应该为您提供树视图中所有选中项目的内容列表。

List<string> optieListBox = new List<string>(); 

     private List<TreeViewItem> GetAllItemContainers(TreeViewItem itemsControl) 
     { 
      List<TreeViewItem> allItems = new List<TreeViewItem>(); 
      for (int i = 0; i < itemsControl.Items.Count; i++) 
      { 
       // try to get the item Container 
       TreeViewItem childItemContainer = itemsControl.ItemContainerGenerator.ContainerFromIndex(i) as TreeViewItem; 
       // the item container maybe null if it is still not generated from the runtime 
       if (childItemContainer != null) 
       { 
        allItems.Add(childItemContainer); 
        List<TreeViewItem> childItems = GetAllItemContainers(childItemContainer); 
        foreach (TreeViewItem childItem in childItems) 
        { 
         CheckBox checkBoxTemp = childItem.Header as CheckBox; 

         if (checkBoxTemp != null) 
          optieListBox.Items.Add(checkBoxTemp.Content); 

         allItems.Add(childItem); 
        } 
       } 
      } 
      return allItems; 
     } 

     private void GetContainers() 
     { 
      // gets all nodes from the TreeView 
      List<TreeViewItem> allTreeContainers = GetAllItemContainers(this.objTreeView); 
      // gets all nodes (recursively) for the first node 
      TreeViewItem firstNode = this.objTreeView.ItemContainerGenerator.ContainerFromIndex(0) as TreeViewItem; 
      if (firstNode != null) 
      { 
       List<TreeViewItem> firstNodeContainers = GetAllItemContainers(firstNode); 
      } 
     } 
+0

我如何将treeview绑定到一个集合? 假设我有 树形目录>的TreeViewItem图书>树型视图书项目 – bubye 2011-04-08 05:33:34

+0

它不会去:的foreach(树型视图childItem在childItems) – bubye 2011-04-08 06:28:02

0

试试这个:

List<string> values = new List<string>; 
foreach (string node in treeView.Nodes) 
{ 
    values.Add(node); 
} 

//Loop through nodes 

另外,如果树视图中的节点有孩子(节点),试试这个来代替:

List<string> values = new List<string>; 

//Called by a button click or another control 
private void getTreeValues(Object sender, EventArgs e) 
{ 
    foreach (string node in treeView.Nodes) 
    { 
     TreeNode child = (TreeNode)child; 
     values.Add(node) 
     getNodeValues(child); 
    } 
    foreach (string value in values) 
    { 
     Console.WriteLine(value + "\n"); 
    } 
} 

//Recursive method which finds all children of parent node. 
private void getNodeValues(TreeNode parent) 
{ 
    foreach (string child in parent.Nodes) 
    { 
     TreeNode node = (TreeNode)child; 
     values.Add(child); 
     if (nodes.Nodes.Count != 0) getNodeValues(child); 
    } 
} 
+0

难道我的回答帮助呢? – zberk 2011-05-09 19:41:58