【发布时间】:2016-07-13 12:00:10
【问题描述】:
请从他的 WPF/MVVM 专家那里得到一些建议。
我来自 Windows 窗体背景,我正在将个人项目从 VB.NET 移植到 WPF。我从直接重写代码隐藏文件中的逻辑开始,尽管使用了离散的数据访问层。但是后来我发现了 MVVM,并且我“做错了”,应该将逻辑抽象为查看模型访问数据模型。我想我已经吸收了新的范例,我的文件背后的代码现在(几乎)是空的。
(顺便说一句,我认同 MVVM 背后的基本原理,但由于路由事件和命令等的所有“管道”,我不确定“更容易测试和调试”的论点,我很欣赏需要,但在我看来,有时会模糊而不是澄清正在发生的事情。但我是一个非常新手,也许它会随着练习而来。)
无论如何 - 这就是让我摸不着头脑的原因;该应用程序是水肺潜水中心的潜水计划/记录工具。从逻辑上讲,它就像一个日历或日记应用程序,需要记录每次潜水的时间和地点以及每次潜水的人员。主屏幕类似于日记的一页,我有一个封装潜水信息的用户控件。更改所选日期时,日记页面将被清除并重新填充新所选日期的潜水。视图模型检索并公开新日期的“潜水”对象(类)列表。该容器是一个 Stackpanel,我想清除它的子控件,然后创建新的 Dive 用户控件并将其添加到子控件集合中。
我的问题是 - 执行此操作的合适位置在哪里 - 查看背后的代码或查看模型?前者相对容易,但在我看来打破了这种模式,但我对如何在视图模型中实现它感到困惑。顺序需要是
- 用户选择新日期(日历控件)
- 处理选定的日期更改事件
- 清除 Stackpanel 子控件
- 从 db 中检索新日期的潜水列表并为每个潜水生成一个用户控件
- 将用户控件添加为 stackpanel 子控件。
我想我要问的是 - 有没有办法将子控件集合绑定到视图模型中的对象集合,以便动态响应 - 这是一种明智的方法吗?
【问题讨论】:
-
您在底部的列表是 100% winforms 和 0% mvvm。在尝试重写之前,您可能想要启动几个原型,在其中进行非常琐碎的 MVVM 工作,作为了解如何完成不同任务的一种方式。如果您不了解 mvvm 在 wpf 中的工作原理,请不要尝试在生产代码中学习它。
-
谢谢 Will,我确实承认我是 MVVM 新手,并且我已经开发了一些“玩具”应用程序。仍然对绑定的力量感到困惑..
-
更多玩具应用!我已经保存了我的所有。有数百个不同的主题。这是一种很好的学习方式。
标签: wpf mvvm data-binding