寻找干净的WinForms MVC教程,适用于C#。

49

如何创建一个功能丰富的用户界面Windows应用程序,例如Photo Shop。

我正在寻找一个针对C# WinForms的干净MVC教程。(不是 ASP.NET MVC。)

作为Windows平台的新手,大多数MSDN和互联网教程基本上将所有内容都放入Form类中。进一步地,默认事件被处理在窗体内部,而不是发送给控件/模型,后者又会改变视图的状态。

或者说,在Windows应用程序中首选的方法是什么?


4
问题在于,相对于Windows Forms来说,其控制器、视图和模型并没有真正分离,因此WinForms可能不是最适合MVC的工具包。我认为在WPF中会更加灵活,你可能会有更好的运气。 - Tamas Czinege
3
在批评之前,您可能想要在这里查看一下: http://stackoverflow.com/questions/2406/looking-for-a-mvc-sample-for-winforms - Refracted Paladin
2
是否可以重新激活一个问题?我们现在处于2012年,我也正在寻找一个好的、简单的Winform MVC示例。 - Bastien Vandamme
请提出问题并参考评论。 - Leandro Bardelli
3个回答

10

2

如果您对使用WPF有兴趣/满意,那么值得看一下Model-View-ViewModel。

它专门针对WPF和Silverlight进行了调整,并利用数据绑定将所有内容粘合在一起。

网上有很多资源可以了解更多信息,包括John Gossman的介绍,以及Josh Smith的一篇不错的文章,他的博客还有其他与MVVM相关的资源。


1
Josh Smith的文章真的很棒。 - s5804

-1

对于Windows应用程序,Windows操作系统无意中成为控制器的一部分。

模型可以订阅各种事件/消息(例如鼠标单击、移动、窗口重新调整大小、按钮单击等)。当它完成其更改-更新-处理后,通过重绘操作更新视图。

Windows操作系统在这里充当控制器,因为它既向模型发送消息(例如鼠标单击),也向视图发送消息(告诉它某个窗口部分是脏的,需要重绘)。

当然,对于任何商业应用程序,您都应该实现自己的模型和文档结构,并将它们与相应的WinForm对象分开。

在.net中,这并不那么清晰,因为模型和视图部分只有一个文件。在MFC中,这非常清晰 - 有一个CDocument类及其相应的CView类。

与其使用MVC模式,对于Windows应用程序而言,了解Windows消息体系结构以及如何处理它们会更有帮助。


你是在暗示Winforms在大多数情况下已经足够了吗?只要消息传递做得正确? - s5804
是的。但是请考虑是否存在需要更新多个表单等情况。在这种情况下,也许将模型分离到不同的类中并实现一个控制器来协调模型类和表单对象之间可能更有意义。 - Sesh
我不同意这个说法:“对于Windows应用程序,Windows操作系统无意中成为控制器的一部分。” 即使WinForms没有强制使用特定的模式(MVC / MVP / MVVM等),您仍然可以使用模式。请查看balioune_ba和Refactored Paladin的链接以获取模式和框架。话虽如此,MVC可能不是WinForms的最佳模式,而WPF提供了一种更自然的实现MV *模式的方式。 - Ryan
@Ryan,如果你至少读完了整篇文章或者回答s5804的问题。这篇文章说Windows操作系统是“控制器”的一部分。只要随操作系统提供的windows.h文件中有窗口消息的定义,这种说法就仍然有效。 - Sesh
我已经阅读了整篇文章,但仍然尊重地不同意。控制器是你所做的。如果您不将控制器与操作系统绑定,则操作系统无关紧要。这一切都取决于设计;这就是为什么MVC框架存在于许多不同的平台上,尽可能绑定特定的OS功能。最后,这是C#/WinForms而不是Win32 with #include <windows.h>。有WinForm MVC框架存在。另一方面,如果您的意思是现有的WinForms MVC框架是Windows特定的而不是跨平台的,那么我可以同意。 - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接