WPF以MVVM样式添加/编辑/删除树视图节点

时间:2013-05-28 08:39:52

标签: wpf mvvm treeview

我是MVVM和WPF树视图的新手。我做了一些研究,并在MVVMthis以及this上阅读了Josh Smith的文章。

我认为在WPF中创建树视图没有问题。事情在我的应用程序上,左侧面板是树视图,右侧面板将显示所选树视图节点的一些属性,用户可以单击按钮编辑属性并将其保存到数据源(并且可能会影响树视图项目)。此外,用户可以添加/删除子节点/孙子节点。

我似乎找不到使用MVVM实现此任何文章/示例。

我目前正在考虑在子节点和孙子节点的视图模型中,我将添加一个指向Usercontrol的公共属性。右侧面板将绑定到树视图的选定项目的Usercontrol。问题是,当用户添加子节点/子节点时,右侧面板将用于让用户填写信息并保存。我不确定它是否会影响绑定。

编辑树节点属性等其他问题意味着将节点的所有子节点信息复制到新节点,并从树中删除旧节点并将新节点添加到树中?

有人能指出我关于类似实施的任何好文章,或者对我应该注意的问题大致提出一些想法吗?

非常感谢你。 安吉拉

1 个答案:

答案 0 :(得分:2)

很大程度上取决于你的设置,但这是我之前使用的方式。

请注意,您可能需要 ChildPropertyChanged 事件类型的事物(我将其命名为),以将树中的更改冒泡到树的根目录。

添加节点

我创建了一个包含以下内容的ViewModel:

  • 树数据集合的属性(可能是对根节点的引用)
  • 一个名为NewNode的属性。
  • 名为CurrentNode
  • 的属性
  • 将NewNode添加到CurrentNode的命令:AddCommand

在视图中:

  1. 将TreeView绑定到树数据集
  2. 将TreeView的SelectedItem绑定到CurrentNode
  3. 将带有新节点数据的控件绑定到NewNode属性
  4. 将按钮绑定到AddCommand
  5. 在AddCommand中:

    1. 将NewNode添加到CurrentNode并重新初始化NewNode属性。
    2. 编辑节点

      在ViewModel中

      • 添加命令:UpdateCommand
      • 添加命令:EditCommand

      在视图中

      • 将一些编辑控件绑定到CurrentNode的属性(OneWay绑定)
      • 将按钮绑定到EditCommand
      • 将按钮绑定到UpdateCommand

      在EditCommand中:

      • 使编辑控件和更新按钮可见(我使用State属性进行绑定,请参阅下面的额外内容)

      在UpdateCommand中:

      • 将编辑控件的值写入SelectedNode
      • 隐藏编辑控件(我使用State属性进行绑定,请参阅下面的额外内容)

      删除节点

      在Viewmodel中

      • 添加DeleteCommand

      在DeleteCommand中:

      • 从集合中删除CurrentNode

      附加

      我发现在Node的ViewModel上实现IEditableObject非常有用。

      使用此界面的方法,您可以添加取消按钮以反转EditCommand。通过将State属性添加到节点的ViewModel(New,Modified,Deleted),您可以跟踪更改,知道要发送到模型/数据库的更新,并且可以将View绑定到它以显示/隐藏元素。