2013-06-05 76 views
1

我想通过调用以下方法的根和子树来构建动态树。 我有有3种方法WPF:动态构建树

tranViewModel.GetWSMethodName() 
tranViewModel.GetAllRequest() 
tranViewModel.GetAllResponse() 

我有串的这个名单,我需要环通的方法和添加项目到我下面的字符串列表TransactionTypeViewModel: 的字符串会被用来显示根和树的孩子。

List<String> wsMethodNameList = new List<String>(); // root of tree from tranViewModel.GetWSMethodName() 
List<String> requestXmlList = new List<String>();  // child1 tranViewModel.GetAllRequest() 
List<String> responseXmlList = new List<String>();  // child2 tranViewModel.GetAllResponse() 

一旦我从每种方法中得到字符串列表,我想构建我的树。

List<TreeViewModel> nodes = getAllTreeNodesFromModel(); 
     var request = new TreeViewModel(); 
     var response = new TreeViewModel(); 
     var parent = new TreeViewModel(); 

     List<TreeViewModel> requestNodes = new List<TreeViewModel>(); 

     for (int i = 0; i < requestXmlList.Count; i++) 
     { 
      // requestNodes = new List<TreeViewModel>(); 
      request = new TreeViewModel { Value = requestXmlList[i] }; 
      //requestNodes.Add(request); 
      request.Children = nodes; 
     } 


     List<TreeViewModel> responseNodes = new List<TreeViewModel>(); 
     for (int i = 0; i < responseXmlList.Count; i++) 
     { 
      // responseNodes = new List<TreeViewModel>(); 
      response = new TreeViewModel { Value = responseXmlList[i] }; 
      // responseNodes.Add(response); 
      response.Children = nodes; 
     } 

     List<TreeViewModel> parentNode = new List<TreeViewModel>(); 
     for (int i = 0; i < wsMethodNameList.Count; i++) 
     { 

      // parentNode = new List<TreeViewModel>(); 
      parent = new TreeViewModel { Value = wsMethodNameList[i] }; 
      // parentNode.Add(parent); 
      parent.Children.Add(request); 
      parent.Children.Add(response); 

     } 

     return new ObservableCollection<TreeViewModel> { parent }; 

当我执行这一切后,我得到的是复制treeview。我找不到解决这个问题的更简单的方法。有人能帮助我理解吗?

+1

你正在做一些非常奇怪的事情与你的'request'和'response'变量,多次重新分配他们,只要我能在快看出来,设置发现'response.Children'包含'response'的情况。它并不像我这样认为你已经充分考虑了你实际构建的数据结构,以及你需要采取什么步骤来从你的想法转变到你想要的。尝试在您的脑海中逐步“运行”代码,看看会发生什么。注意:使用LINQ几乎肯定有一种更简单的方法来实现这一点,但您必须先学习LINQ。 –

+0

感谢马修我知道我做错了一些地方,但我不能把我的手指放在它上面..关于LINQ我很新。 –

+0

我发现我的问题是什么,我会尽快发布解决方案。 –

回答

0

我想我找出了问题所在。我为每个列表创建循环。这是我如何洗干净:

 for (int i = 0; i < wsMethodNameList.Count; i++) 
     { 
      var child = new TreeViewModel { Value = wsMethodNameList[i] }; 
      parent.Children.Add(child); 

      var requestChild = new TreeViewModel { Value = requestXmlList[i] }; 

      requestChild.Children = nodes; 
      child.Children.Add(requestChild); 


      var responseChild = new TreeViewModel { Value = responseXmlList[i] }; 

      responseChild.Children = nodes; 
      child.Children.Add(responseChild);    

     } 

     return new ObservableCollection<TreeViewModel> { parent };