MVVM最常用于WPF,因为它非常适合它.但是Windows Forms怎么样?对于Windows Forms,是否存在已建立且常用的方法/设计模式?一个与Windows Forms明确协作的一个?有没有一本书或一篇文章能够很好地描述这一点?也许MVP或MVC基于?
我在Stack Overflow上看到了一些这样的提及,但是盯着维基百科(相关页面已被删除),并且在一个MFC动态对话框演示中没有任何启发我.有人可以解释一下吗?学习一个根本不同的概念听起来不错.
根据答案:我认为我对此有了更好的感受.我想我第一次没有仔细查看源代码.在这一点上,我对差异执行情有不同的看法.一方面,它可以使某些任务变得相当容易.另一方面,启动并运行(即,用您选择的语言设置)并不容易(我确信如果我更好地理解它)...虽然我猜它的工具箱只需要制作一次,然后根据需要进行扩展.我认为为了真正理解它,我可能需要尝试用另一种语言实现它.
language-agnostic model-view-controller differential-execution
当我希望将控件绑定到我的对象的属性时,我必须提供属性的名称作为字符串.这不是很好,因为:
是否有一个设计模式可以解决这个问题,但仍然易于使用数据绑定?
(这是WinForm,Asp.net和WPF中的一个问题,很可能是很多其他系统)
我现在已经找到了" C#中的nameof()运算符的变通方法:typesafe databinding ",它也是解决方案的一个很好的起点.
如果您在编译代码后愿意使用后处理器,那么notifypropertyweaver非常值得关注.
当绑定在XML而不是C#中完成时,任何人都知道WPF的良好解决方案吗?
我没有开发太多桌面/ Windows窗体应用程序,但我发现使用MVC(模型视图控制器)模式进行Windows窗体.NET开发可能会有一些好处.
有没有人在Windows窗体中实现MVC?如果是这样,你对设计有任何提示吗?
首先,我没有生气,因为我MVVM在WinForms中使用 - )我知道MVP(Model View Presenter)模式及其变体.当我开始这个项目时,我将学习WPF并使用它,但我不得不急于开发程序,并且没有时间学习WPF,所以我必须在WinForms中编写它,我很清楚.
所以简而言之,我有一个面向数据的大型智能客户端应用程序,接近完成,我已完成所有模型和ViewModel(基础设施,域,演示完成)UI也已完成,现在我只需要将UI连接到ViewModels.
首先,我开始使用标准winforms方式(BindingSources和简单的数据绑定)连接它,但是当我做了30-50%的绑定时,我发现我的程序运行速度很慢,到目前为止,我总共有100-150个绑定属性,30它们是域根实体(聚合根)绑定到其EditForm.因此数据绑定在这种情况下不能很好地工作,许多不必要的更新,当小的变化,不清楚的行为和其他丑陋的东西时,整个视图的级联更新.它闻起来像非常不可靠的代码,我几乎无法控制.
所以我开始重写布线作为纯粹干净的WinForms代码(订阅PropertyChange和ListChanged事件,并从UI自己设置ViewModels属性).很多代码要写,但它的工作速度要快得多,我对此完全控制,感觉更可靠.
那么你对这些家伙的想法是什么?谁有过这样的经历?您对"To DataBind与否"的判断是什么?
我正在尝试重构现有的Winform应用程序以使用MVP被动视图模式.应用程序的UI,业务逻辑和数据存储代码已经多年自由混合.看起来它要么是从单独的层开始,要么是有人试图将它分成层.在任何情况下都不尊重层边界.
由于表单直接操作域对象和数据源(反之亦然),我的第一个任务是创建演示者/控制器对象并委派这些职责.
该应用程序是一个.NET 1.1应用程序,我正在使用相当有限的重构加载项在VS.NET 2003中进行开发.我使用测试生成器为现有代码创建锅炉板单元测试然后经过并手动编辑每个测试.当然,这最终会测试代码的功能,而不一定是它所要做的.对于新课程,我正在做TDD.
任何提示,资源,陷阱需要通过这种规模的重构努力来寻找?
我已经拥有的一些资源:
更新:举个例子,你会采取什么步骤来解决这个问题:
private void OneOfManyFormEventHandlers(object sender, System.EventArgs e)
{
string LocalVariable;
decimal AnotherLocal;
if (!this._SomeDomainObject.SomeMethod(ClassField, out LocalVariable, out AnotherLocal))
{
MessageBox.Show("An error occurred calling method");
return;
}
this.FormControl.Value = LocalVariable;
this.AnotherFormContorl.Value = AnotherLocal;
this.AnotherPrivateMethod();
}
Run Code Online (Sandbox Code Playgroud)
进入:
private void OneOfManyFormEventHandlers(object sender, System.EventArgs e)
{
this.FormPresenter.DoSomething();
}
Run Code Online (Sandbox Code Playgroud) 我们想要创建一个使用MVC设计模式的巨大C#应用程序.有人可以指导我们如何开始?
我的form1(设计)中有一个按钮,但是在我的form1(Class)中,它变得非常拥挤,所以我想创建一个新类.但是如何使按钮在新类中工作(新类名称为form2(Class).当然该函数适用于form1(Class)中的按钮,那么如何使它从form2(Class)开始工作?