【问题标题】:Binding ViewModel object to dataset将 ViewModel 对象绑定到数据集
【发布时间】:2020-06-23 21:12:15
【问题描述】:

我是 MVVM/WPF 的新手,并尝试使用 MVVM 设计模式。我参考本教程https://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode 来使用树视图和数据库。

我知道我可以更改 Treeview 选定的项目并参考它我也可以在数据库中进行更改。我不知道这是使用树视图和数据库的正确方法。

例如,我有数据库

 ID Name
 1  A
 2  B

我使用 MVVM 在树视图中填充它

 A
 |- B

现在,当将节点 B 重命名为 C 时。我需要在数据库中搜索 B 的 id 并将其重命名。这是实现我的想法的正确方法还是有更好的方法来实现它?

我知道我们可以像这篇文章一样使用Binding TreeView to DataSet 但是它没有使用MVVM,并且无法应用MVVM的某些功能。

【问题讨论】:

  • 为什么不能将每个节点的id存储在一个属性中?

标签: c# wpf mvvm treeview


【解决方案1】:

B 应该在一个属于 A 的属性的集合中。因此一个人 A 有一个子集合,而 B 的一个实例在该集合中。

然后,分层数据模板会将 B 作为 A 的子级。

当您将 A 重命名为 AA 或其他任何名称时,B 仍在该子集合中。 无需更改任何内容。

虽然您可以使用数据集来访问数据,但我认为实体框架会更简单。 EF 可以为您提供已经在必要的层次结构中排列的数据 - 具有子属性。相反,数据集具有您需要使用并自己构建集合的关系。

以下是自引用键的示例:

https://www.sqlservertutorial.net/sql-server-basics/sql-server-self-join/#:~:text=SQL%20Server%20self%20join%20syntax&text=It%20is%20useful%20for%20querying,same%20table%20within%20the%20query.

在那篇文章中,每个员工都有一个员工 ID。经理 ID 引用员工经理的员工 ID。

通常在 rdbms 中处理这种关系的方式是使用自引用表。因此,一张桌子的人将有一个 ID。每个条目都有一个 ParentID。这应该是一个自动生成的整数。如果您改为将其设为有意义的键并使用名称,那么当有人更改名称(可能结婚或离婚)时,则必须更改外键的值。通过使用非自然生成的密钥,这是不必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2015-06-08
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2020-09-21
    相关资源
    最近更新 更多