2013-06-05 5 views
1

Я хочу построить динамическое дерево, вызывая корни и дочерние элементы из приведенных ниже методов. У меня есть TransactionTypeViewModel, который имеет 3 методWPF: Динамическое построение дерева

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

У меня есть этот список строки, где мне нужно, чтобы петли через методы и добавить элементы в список строки ниже: Струны будет использоваться для отображения корня и ребенок дерева.

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 }; 

После того, как я вычищу это, я получаю дублированное дерево. Я не мог найти более простой способ решить эту проблему. Может ли кто-нибудь помочь мне понять?

+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 };