4

我是 MVVM 和 WPF 树视图的新手。我做了一些研究并阅读了 Josh Smith 关于MVVM的文章,还有这个,还有这个

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

我似乎找不到任何文章/示例来使用 MVVM 实现这一点。

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

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

有人可以向我指出任何关于类似实现的好文章,或者就我应该注意的问题给出一个粗略的想法等吗?

非常感谢你。安吉拉

4

1 回答 1

2

很大程度上取决于您的设置,但这是我以前使用过的一种方式。

请注意,您可能需要一个ChildPropertyChanged事件类型(我起了这个名字)来将树中的更改冒泡到树的根部。

添加节点

我创建了一个 ViewModel,其中包含:

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

在视图中:

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

在添加命令中:

  1. 将 NewNode 添加到 CurrentNode 并重新初始化 NewNode 属性。

编辑节点

在视图模型中

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

在视图中

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

在编辑命令中:

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

在更新命令中:

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

删除节点

在视图模型中

  • 添加删除命令

在删除命令中:

  • 从集合中删除 CurrentNode

额外的

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

使用此接口的方法,您可以添加取消按钮来反转 EditCommand。通过将 State 属性添加到节点的 ViewModel(新、已修改、已删除),您可以跟踪更改,知道要发送到模型/数据库的更新,并且可以将视图绑定到它以显示/隐藏元素。

于 2013-05-28T18:04:25.800 回答