2013-10-18 3 views
0

내 프로그램에는 TreeView이 포함 된 UserControl이 있습니다. 그 TreeView에는 ViewModel과 이에 관련된 모델이 있습니다. 단추를 클릭하면 트리 전체에서 노드를 위아래로 이동할 수 있습니다. 이는 listBox에서 구현할 수있는 것과 유사합니다.TreeView에서 위아래로 노드 이동

안내서로는 this article을 사용하고 있습니다.

TreeView이있는 UserControl의 코드 숨김에 다음 기능을 구현합니다. 내 구조가 다르다, 나는 실제로 TreeView 같은 ObservableCollection을 구현하고 있기 때문에

//Move up 
private void moveUp_Click(object sender, RoutedEventArgs e) 
{ 
    if(UCViewModel.TreeView.SelectedItem != null) 
    { 
      if(UCViewModel.TreeView.SelectedItem is TreeModel) 
      { 
       TreeModel tm = UCViewModel.TreeView.SelectedItem as TreeModel; 
       if(tm.Rank != 1) 
       { 

       } 
      } 
    } 
} 
private void MoveUp(TreeModel tm) 
{        //My guess on how to call the equivalent command... 
     foreach (TreeModel item in // **UCViewModel.TreeView.GetAllChildren....?) 
     { 

     } 
} 

, 나는 예제의 코드와 동일한 방법에 액세스 할 수 없습니다.

다음 줄

TreeView.Items.Clear();

  • TreeView.Items.Add();
  • TreeView.Items();

  • 이 어떻게 동등한 통화를 할 수 있습니다

    • ... 나는이 걱정 라인이다 그런데 내 TreeView가 정착 중이다. 피? 더 많은 코드가 도움이 될지 알려주십시오.

  • 답변

    1

    MVVM의 주요 아이디어는 treeView.Items.Add() 또는 treeView.GetAllChildren() 또는 TreeView에서 필요한 모든 방법을 사용하지 않는 것입니다.

    MVVM 패턴은보기에 관심이 없다고 말하면보기 또는보기 내부의 제어에 대해 몰라요.

    따라서 ObservableCollection이 ViewModel의 ItemsSource로 있으면 항목 만 이동하면 TreeView가 따라옵니다.

    간단합니다. TreeView는 ObservableCollection이 ViewModel 내부에 배치되는 위치를 알아야합니다.

    ObservableCollection 내에서 무언가를 변경할 때마다 새 항목이나 이동 한 항목을 추가했는지에 관계없이 정보를 담고있는 적절한 이벤트 인수로 컬렉션 변경 이벤트가 트리거됩니다. 그것이 TreeView가 어떻게해야하는지 알 수있는 방법입니다.

    +0

    +1. 또한,이 기사가 WPF에서'TreeView' 작업을 시작할 때 매우 유용하다는 것을 알게되었습니다 : [ViewModel 패턴을 사용하여 WPF TreeView를 단순화] (http://www.codeproject.com/Articles/26288/Simplifying-the- WPF-TreeView-by-ViewMode 사용) – Sphinxxx

    +0

    이것은 좋은 설명입니다, 감사합니다. 결국 ObservableCollection.Move();를 살펴 보았습니다. - http://msdn.microsoft.com/en-us/library/ms654933.aspx –

    관련 문제