【发布时间】:2014-03-11 16:19:16
【问题描述】:
我一直在阅读有关 WPF 上的 MVVM 的信息。只要我理解正确,在 MVVM 中我应该将模型(要显示的数据)与显示它的方式(视图)分开,使用 ModelView 来链接两者,对吧?
所以我想做的是使用DataSet 作为模型,其中 n 个字段来自数据库。字段名称、类型和顺序是可变的(从 SQL Server 视图中选择)。
视图将是一个带有 Datagrid 的 WPF 表单。
所以我应该以一种迭代数据集中每个字段的方式构建我的模型视图,并根据字段类型格式化数据,以便稍后在网格上显示。
在 WPF 上使用 MVVM 模板可以做到这一点吗?
提前致谢
更新
我将尝试根据 LordTakkera cmets 阐明我的场景和我尝试做的事情。 我正在使用 .NET 技术构建客户端-服务器分层应用程序。客户端和服务器将在不同的机器上,与 WCF 通信。 一些不同的客户会使用这个软件,所以假设这个场景: 客户 1、2 和 3 需要在网格上显示销售报告。
客户 1 需要:销售日期、客户名称和销售导入。
客户 2 需要:销售日期、供应商名称和销售导入。
客户 3 想要在他的客户表中添加一个数字字段,该字段表示每个客户的预期销售额,并希望在销售报告中显示它。
如果我使用强数据类型,我需要为每个客户端提供一个二进制文件,我是这样吗? 我想要的是为客户端 1、2 和 3 使用相同的二进制文件,根据数据库数据更改销售报告的输出。
为什么?原因很多:
1) 消除错误:如果我在某个类中发现错误,我可以纠正它,重新编译并将纠正后的二进制文件提供给我的所有客户。
2) 可扩展性:如果我向系统中添加了客户 1 要求的某些功能,我可以将该功能提供给我的所有客户。
3) 灵活性:我可以使用相同的二进制文件为每个客户端更改软件的行为。
我了解强类型的优势,实际上我会在某些情况下使用强类型。但在其他情况下,灵活性对我来说很重要。 那么,我的选择是什么?
谢谢!
更新 2
在@LordTakkera 和此页面中的许多人的帮助下,我设法开始了我的应用程序的开发。现在我有了我的模型、我的 wcf 服务、我的客户以及我的第一个 ViewVode 和 View。现在我正在尝试为应用程序添加更多复杂性,为我的项目添加多个 XAML 视图。如果我继续遵循 MVVM 模式,则此页面与插入所有其他视图的主页之间的导航也应该使用 viewModel 进行管理(对于我阅读的内容,它称为应用程序 viewModel)。我的想法是有一个容器 MainPage ,其中包含将出现子视图的区域。我还希望将子视图放在单独的 XAML 文件中,因为有些视图非常复杂,我会丢失视图!问题是在带有主容器页面的 MVVM 模式上找不到 WPF 导航的单个示例代码。我能找到的所有示例代码:
1) 使用外部工具包,如 Prism 或 MVVM ligth,现在我不想搞乱新事物!
2) 每个视图的所有控件都是在单个 XAML 上创建的。
我需要一些代码方面的帮助来创建我的应用程序的基本布局,并且想知道我的计划是否可行。谢谢!
【问题讨论】:
-
与 MVVM 无关,但是,忘记
DataSet。它只是一个美化的Dictionary<string,object>,它迫使你进行各种可怕的stringly typedhacks 和强制转换,并引入了一堆丑陋且容易出错的代码。创建一个适当的强类型数据模型,并将您的 UI 数据绑定到该模型的适当属性。 -
对不起,我不明白。正如我提到的,我的想法是使用 MVVM 将 SQL Server 视图的结果显示到 GridView 中。因此,如果我理解正确,您告诉我我需要创建一个强类型类来存储 DataSet 中的数据。但在这种情况下,如果视图发生变化(例如我添加了一个字段),我必须修改模型类、视图模型和视图并重新编译我的所有代码!这对我来说听起来很疯狂!没有办法创建抽象模型、视图模型和视图吗?谢谢!