为 C# 寻找干净的 WinForms MVC 教程 [关闭]

Posted

技术标签:

【中文标题】为 C# 寻找干净的 WinForms MVC 教程 [关闭]【英文标题】:Looking for clean WinForms MVC tutorial for C# [closed] 【发布时间】:2010-10-31 15:44:30 【问题描述】:

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

我正在某处寻找带有 C# 的 WinForms 的干净 MVC 教程。 (不是 ASP.NET MVC。)

Windows 平台上的新手;大多数 MSDN 和互联网教程基本上都将所有内容都放入 Form 类中。进一步的默认事件在表单内部处理,而不是向控件/模型发送事件,这反过来会改变视图的状态。

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

【问题讨论】:

问题是 WinForms 可能不是 MVC 的最佳工具包,因为在 Windows 窗体中,控制器、视图和模型并没有真正分离。我认为你会在 WPF 中获得更多的运气,在这个意义上它更灵活。 你可能想在嘘鸟出来之前看看这里。 ***.com/questions/2406/… 是否可以重新激活问题?我们现在是 2012 年,我也在寻找一个简单的 Winform MVC 示例。 问它,请参考评论 【参考方案1】:

Derick Bailey(通过 Los Techies)拥有 blogged some fantastic articles(和完整的演示源代码),用于他在 WinForms 应用程序中实现 MVP,并添加了一些其他好的模式(应用程序控制器、事件聚合器)。

作品灵感来自Jeremy D Miller's series of articles titled 'Build Your Own CAB'

【讨论】:

【参考方案2】:

Model-View-ViewModel 可能值得一看(如果您特别感兴趣/乐于使用 WPF)。

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

网上有很多资源可以找到更多信息,包括 John Gossman 的 introduction,以及 Josh Smith 的 article,他的 blog 上还有其他与 MVVM 相关的资源。

【讨论】:

乔什·史密斯的文章真不错【参考方案3】:

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

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

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

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

在 .net 中这不是很清楚,因为模型和视图部分只有一个文件。在 MFC 中非常清楚 - 使用 CDocument 类及其对应的 CView 类。

对于 Windows 应用程序,它有助于理解 Windows 消息传递体系结构以及如何处理它们,而不是 MVC 模式。

【讨论】:

您是否建议 Winforms 在大多数情况下就足够了。如果消息传递正确? 是的。但是,如果您有需要更新多个表单等情况,请考虑一下。在这种情况下,将模型分成不同的类可能是有意义的,并且可能还可以实现控制器以在模型类和表单对象之间进行协调。 我不同意以下说法:“对于 Windows 应用程序,Windows 操作系统无意中成为了控制器的一部分。”即使 WinForms 不要求特定模式(MVC/MVP/MVVM/等),您仍然可以使用模式。查看来自 balioune_ba 和 Refactored Paladin 的链接以了解模式和框架。话虽如此,MVC 可能不是 WinForms 的最佳模式,而 WPF 提供了一种更自然的方式来实现 MV* 模式。 @Ryan,如果您至少阅读了整篇文章或 s5804 问题的答案。该帖子称 Windows 操作系统是控制器的“一部分”。这将一直有效,直到操作系统附带的 windows.h 文件具有 windows 消息的定义。 我确实阅读了整篇文章,但我仍然不同意。控制器就是你所用的。如果您不将控制器与操作系统绑定,那么操作系统就无关紧要了。一切都与设计有关;这就是为什么 MVC 框架存在于许多不同平台上的原因,在可能的情况下专门绑定到操作系统功能。最后,这是 C#/WinForms 而不是带有#include 的 Win32。那里有 WinForm MVC 框架。另一方面,如果您的意思是确实存在于 WinForms 的 MVC 框架是特定于 Windows 的而不是跨平台的,我可以同意。

以上是关于为 C# 寻找干净的 WinForms MVC 教程 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 c# winforms 中扩展文本框

C# WinForms 有滑块控件吗?

屏幕截图上的 OCR

C# Winforms 连接到 MySQL AWS 数据库

如何在 WinForms 中设置面板的不透明度或透明度?

C# WinForms 中的切换按钮