0

在我的程序中,我有一个包含TreeView. 那TreeView有一个 ViewModel 和一个与之相关的模型。我想这样做,以便通过单击按钮,我可以在整个树中上下移动节点。这类似于在listBox.

作为指南,我正在使用这篇文章

我正在将以下函数实现到TreeView存在的 UserControl 的代码隐藏中。

//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....? )
      {

      }
}

因为我的结构不同,而且我实际上是在实现ObservableCollectionas a TreeView,所以我无法访问与示例中的代码相同的方法。

以下几行是我关心的行...

  • TreeView.Items();

  • TreeView.Items.Clear();

  • TreeView.Items.Add();

如何使用我TreeView的设置方式进行等效调用?如果更多代码会有所帮助,请告诉我。

4

1 回答 1

1

MVVM 的主要思想是不使用 treeView.Items.Add() 或 treeView.GetAllChildren() 之类的东西,也不要使用 TreeView 所需的任何方法。

MVVM 模式表示您不关心视图,并且您不了解视图或视图内的任何控件。

因此,如果您在 ViewModel 中有一个 ObservableCollection 作为 ItemsSource,您只需将项目移到那里,TreeView 就会跟随您。

就如此容易。您的 TreeView 只需要知道 ObservableCollection 在您的 ViewModel 中的位置。

每当您更改 ObservableCollection 中的某些内容时,您都会触发带有适当事件参数的集合更改事件,其中包含您添加新项目或移动项目的信息。这就是 TreeView 知道该做什么的方式。

于 2013-10-19T08:10:38.020 回答