Winforms Windows窗体的UI设计模式(如用于WPF的MVVM)
MVVM最常用于WPF,因为它非常适合WPF。但是Windows窗体呢?对于Windows窗体是否也有这样一种已确立且常用的方法/设计模式?一个能很好地与Windows窗体配合使用的工具?有没有一本书或一篇文章能很好地描述这一点?可能是MVP还是基于MVC?我已经尝试过MVP,它似乎也适用于windows窗体。 这本书有一个带有MVP模式的windows窗体示例(示例工资单应用程序)。这个应用程序并没有那么复杂,但会让您了解如何创建它 您可以在以下位置获得源代码: 编辑: MVP模式有两种变体 (a) 被动视图和(b)监控控制器 对于复杂的数据绑定场景,我更喜欢使用监督控制器模式。 在监控控制器模式中,数据绑定的责任在于视图。因此,对于treeview/datagrid,这应该在各自的视图中,只有视图不可知逻辑应该转移到演示者 我建议大家看看下面的MVP框架 不要直呼其名(这是一个MVP框架) 简单winforms MVP视频 处理下拉列表的一个示例 简单的treeview绑定示例(穷人的绑定)。您可以在BindTree()中添加任何特定于treeview的逻辑。 下面是代码片段。。。。未经测试,直接从思想中输入Winforms Windows窗体的UI设计模式(如用于WPF的MVVM),winforms,design-patterns,Winforms,Design Patterns,MVVM最常用于WPF,因为它非常适合WPF。但是Windows窗体呢?对于Windows窗体是否也有这样一种已确立且常用的方法/设计模式?一个能很好地与Windows窗体配合使用的工具?有没有一本书或一篇文章能很好地描述这一点?可能是MVP还是基于MVC?我已经尝试过MVP,它似乎也适用于windows窗体。 这本书有一个带有MVP模式的windows窗体示例(示例工资单应用程序)。这个应用程序并没有那么复杂,但会让您了解如何创建它 您可以在以下位置获得源代码: 编辑: MVP模式有两种变
public interface IYourView
{
void BindTree(Model model);
}
public class YourView : System.Windows.Forms, IYourView
{
private Presenter presenter;
public YourView()
{
presenter = new YourPresenter(this);
}
public override OnLoad()
{
presenter.OnLoad();
}
public void BindTree(Model model)
{
// Binding logic goes here....
}
}
public class YourPresenter
{
private IYourView view;
public YourPresenter(IYourView view)
{
this.view = view;
}
public void OnLoad()
{
// Get data from service.... or whatever soruce
Model model = service.GetData(...);
view.BindTree(model);
}
}
您可以将它们用作起点,尽管它们有点过时
在一般指导下有,这是对.NET方式和分层N层应用程序的一个很好的介绍
对于更正式的“模式”,有。
(来源:) 举几个例子
BindTree方法似乎有点过时 对我来说是有缺陷的。突然,景色变了 知道这个模型。这是个好主意吗 事情一定有很多人 面对这种情况, 问题。我很惊讶那里 没有关于它的书。从那以后 是关于.NET中所有内容的书籍 世界 这些设计不是关于隐藏模型,而是精确地定义应用程序不同层之间的交互。您可以完全更改后端,只要通过Bindtree传递模型,您的UI就会继续工作 在Rajesh给出的示例中,类模型可能是一个糟糕的名称选择。它可以是TreeData或RecordsData。无论您如何定义它,它都具有使用Winforms的绑定机制将特定控件绑定到基础数据所需的功能 浏览此类资料的最佳网站是。Martin Fowler收集了各种有用的UI设计模式和企业设计模式 同样,关键是使用接口来精确定义每一层如何相互作用 在我自己的应用程序(用于运行金属切割机的CAD/CAM应用程序)中,我的结构如下所示
- 实现表单接口的表单
- 带有实现视图的视图的UIDLL 与表单交互的接口 通过表单界面。这个 特定的视图会自动注册 使用UIViewDLL视图执行找到的命令对象 在交互的命令库中 用这个模型李>
- 命令库;名单 实现ICommand的命令。 与之交互的命令 视图通过接口执行此操作 在UIViewDLL中公开
- UIViewDLL;公开视图接口 由命令使用
- 模型;这些类和集合 构成my的核心数据结构 应用对我来说,这些都是东西 如材料、切割路径、形状、, 床单、手电筒等
- 效用;一个常用的DLL 我公司使用的实用程序类 这跨越了不同的应用。对于 复杂数学函数示例
- 我读到的关于UI设计模式的第一个好解释是在Jeremy Miller的博客-。它描述了常见的模式——被动视图、MVP等,并介绍了在C#中实现它们的一些方法。我相信MVP是一种非常适合WinForms开发的模式——微软WinForms框架中的使用部分证明了这一点
我在WinForms中使用MVP从视图中提取代码,因为我无法测试视图代码。并且还可以使需要重用(或复制)的代码不在视图中,因为它不能被共享
我可以参考我自己使用MVP模式的项目。虽然我肯定我用得并不完美
您提到了为WPF工作的MVVM——我认为这是因为强大的数据绑定支持。如果您没有在WPF中使用数据绑定(这当然不是强制性的),那么您可以选择MVP。关键是MVP对于任何客户端应用程序都是一个很好的选择。如果您计划在非WPF的项目之间共享代码,甚至在WPF中,这可能是一个“更好”的选择
有关在WinForms中使用MVP的价值的更多证据,请参阅Boodhoo关于使用MVP的视频演示:
和同一作者在上的一篇MSDN文章,我写过一种称为MVP-VM的MVP/MVVM设计模式变体,它是为需要完全测试覆盖率并使用数据绑定作为主要机制的winforms应用程序量身定制的解决方案