2013-06-05 3 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 }; 

나는이 모든 것을 얻은 후에 중복 트리 뷰를 얻습니다. 이 문제를 해결하는 더 쉬운 방법을 찾을 수 없었습니다. 누군가 나를 이해하도록 도와 줄 수 있습니까?

+1

당신은'request'와'response' 변수로 몇 가지 아주 이상한 일을하고 있습니다. 여러 번 재 지정하고, 내가 할 수있는 한 빨리 설정할 수 있습니다. 'response.Children'이'response'를 포함하고있는 상황을 설명합니다. 당신이 실제로 구축하고있는 데이터 구조에 대해 충분히 생각한 것처럼, 당신이 원하는 것에서 당신이 원하는 것으로 변환하기 위해 취해야 할 조치는 무엇인지 생각하지 않습니다. 머리에서 단계적으로 코드를 '실행'해보고 어떤 일이 일어나는지보십시오. 참고 : LINQ를 사용하여이 작업을 수행하는 것이 가장 쉬운 방법이지만 LINQ를 먼저 배워야합니다. –

+0

Matthew에게 감사드립니다. 나는 그 곳을 잘못하고 있다는 것을 알고 있지만, 나는 그것에 손가락을 대지 못했습니다. 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 };