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

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

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

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

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

【问题讨论】:

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

标签: c# winforms user-interface methodology model-view-controller


【解决方案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 的而不是跨平台的,我可以同意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多