C# 关于使用WCF服务的MVVM模式的一般问题

C# 关于使用WCF服务的MVVM模式的一般问题,c#,wpf,wcf,mvvm,C#,Wpf,Wcf,Mvvm,我正在WCF服务上使用MVVM模式构建我的第一个WPF应用程序。我对这项技术不熟悉。在做了大量工作之后,在这个comunity的帮助下,我成功地为我的应用程序创建了基础,从数据层和服务层到使用MVVM模式和WPF的完整客户端。尽管如此,对于这种技术还是有一些概念上的顾虑/疑问,也许有人可以帮助澄清 我的问题 1只要我不理解每个视图模型都不知道 其余视图的存在性。这意味着每个视图都有自己的 viewmodel是孤立的。那么,在我的应用程序中,我需要 实例来显示一个视图,该视图创建一个新视图并需要获

我正在WCF服务上使用MVVM模式构建我的第一个WPF应用程序。我对这项技术不熟悉。在做了大量工作之后,在这个comunity的帮助下,我成功地为我的应用程序创建了基础,从数据层和服务层到使用MVVM模式和WPF的完整客户端。尽管如此,对于这种技术还是有一些概念上的顾虑/疑问,也许有人可以帮助澄清

我的问题

1只要我不理解每个视图模型都不知道 其余视图的存在性。这意味着每个视图都有自己的 viewmodel是孤立的。那么,在我的应用程序中,我需要 实例来显示一个视图,该视图创建一个新视图并需要获取 调用方视图上此子视图的结果?在本例中,每个视图 它是viewmodel,那么如何在 视图/视图模型

2我的WCF服务向客户端公开POCO的对象。所以这是 基本上是一个断开的环境。那么报告呢?如果我 遵循MVVM指导原则,我应该从我的 viewmodel,获取对象,然后公开一个不知何故 必须绑定到XAML中的报表对象,对吗?因此,报告应该 不知道我的数据库。我可以使用哪些对象来构建我的数据库 允许我使用POCO对象作为数据源的报告

我知道这个在社区里有点争议。我的数据和 服务层使用从服务层生成的POCO通信数据 数据库,wich还可以。现在我的疑问是,当我和客户沟通时, 我应该使用相同的对象还是构建自己的自定义对象

4例如,当我需要将标题详细信息对象保存到数据库时 客户的采购订单,我是否应该创建一个自定义对象 具有标题对象的实例和详细信息项的集合 在服务器端,还是这是viewmodel工作

5有人能给我一个实际的例子,说明什么时候每个viewmodel有多个视图是有用的吗?通过我所做的工作,我得出结论,每个视图都非常依赖于viewmodel

如有任何意见,将不胜感激。我正在努力学习好的编程 在这里练习

更新

在回复评论之后,我将尝试澄清我的问题:

大约1我怀疑这是MVVM的关键问题之一。不管怎么说,我正试图远离外部工具,因为在过去,我有严重的问题。当您确实遇到外部工具包的问题时,找到答案非常困难,有时甚至是不可能的。难道不能使用VisualStudio中提供的基本MVVM,用一种不太复杂的方法来解决这个问题吗

大约2点,我还没用任何东西。我在提前考虑。您建议如何以MVVM方式构建我的报告?在过去,我使用断开连接的Crystal reports对象做过类似的事情。我使用记录集在服务器中进行查询,使用XML或其他方式将数据发送到客户端,然后在客户端中再次将数据转换为记录集,并将报表数据源设置为此对象。我也在考虑类似的方法,但使用pocos类和MVVM。有什么想法吗

我想这就是我一直在做的,但我不确定。例如,当我需要用客户填充组合框以过滤客户订单时,我直接公开我的POCOs类。我知道这不是更有效的方法,因为当我只需要2到3个对象时,我需要转移对象的所有属性,但为了简单起见,我发送整个对象。当我需要在网格中显示结果过滤器的客户订单时,我使用一个自定义类,其中只包含我希望在网格中显示的属性。你说我创造数据是为了这个?POCO的类不也是DTO吗

大约4当我需要插入或更新客户订购的主细节对象时,通常需要对至少2个或更多数据库对象进行更改。所以我的问题是:我应该在数据层中创建并公开包含单个数据库对象类的复杂对象吗?或者最好公开基本对象,让viewmodel处理单个对象,并将它们逐个发送到服务层进行更新?希望事情弄清楚

大约5点,我怀疑。我会记住的。 谢谢

这是WPF中MVVM的固有问题。有两个库可以帮助解决这个问题。看看 Micro使用ViewModel优先的方法来解决这个问题 问题另一个库是微软自己的Prism库。这 图书馆采用视图优先的方法来解决这个问题

您如何生成报告?如果您正在使用类似SSR的东西,那么它们有自己的公开WCF服务来检索报告。 您可以将其包装到服务中,并在ViewModels中使用它

视情况而定。您的对象有多复杂?如果您正在执行简单的操作,则dat 一个模型可能很好。然而,更多 复杂操作我倾向于创建一个DTO数据传输项目 包含一个工作单元

我不确定我是否理解这个问题

您应该努力使每个viewmodel始终有一个视图。如果有理由有一个单独的观点,可能有一个很好的理由 使用单独的viewmodel。你可能遇到的问题是 与1相关,并且您希望以某种方式在这些视图之间共享数据

总的来说,我知道你的痛苦,出于你所说的一些原因,我对使用MVVM的WPF有一种爱/恨的关系。在我在1中列出的两个框架中,我使用了Calibrun.micro,它使WPF MVVM更易于访问和使用。一篇好的博客文章是:

如果需要,还可以查看prism:

还有一些其他的。这是我曾经经历过的两件事。棱镜没问题。然而,我个人不喜欢他们的导航服务

希望这有帮助

这是WPF中MVVM的固有问题。有两个库可以帮助解决这个问题。看看 Micro使用ViewModel优先的方法来解决这个问题 问题另一个库是微软自己的Prism库。这 图书馆采用视图优先的方法来解决这个问题

您如何生成报告?如果您正在使用类似SSR的东西,那么它们有自己的公开WCF服务来检索报告。 您可以将其包装到服务中,并在ViewModels中使用它

视情况而定。您的对象有多复杂?如果您正在执行简单的操作,那么数据模型可能很好。然而,更多 复杂操作我倾向于创建一个DTO数据传输项目 包含一个工作单元

我不确定我是否理解这个问题

您应该努力使每个viewmodel始终有一个视图。如果有理由有一个单独的观点,可能有一个很好的理由 使用单独的viewmodel。你可能遇到的问题是 与1相关,并且您希望以某种方式在这些视图之间共享数据

总的来说,我知道你的痛苦,出于你所说的一些原因,我对使用MVVM的WPF有一种爱/恨的关系。在我在1中列出的两个框架中,我使用了Calibrun.micro,它使WPF MVVM更易于访问和使用。一篇好的博客文章是:

如果需要,还可以查看prism:

还有一些其他的。这是我曾经经历过的两件事。棱镜没问题。然而,我个人不喜欢他们的导航服务


希望这有帮助

谢谢你的回答!我编辑我的问题以添加更多细节。如果可以,请看一下。谢谢你的回答!我编辑我的问题以添加更多细节。如果可以,请看一下。