Tag: mvp

使用MVP架构的WinForms中BackGroundWorker的最佳实践

我正在开展一个winforms项目。 我正在实现一个MVP架构。 我在演示者处运行了一些处理密集型作业(从文件系统读取并对数据库执行批量插入)。 我想在后台线程中执行这些操作,而不会锁定UI并更新我的视图上的控件(进度条和datagridview)。 我应该只是通过让视图事件处理程序触发演示者正在侦听的事件来访问演示者中的backgroundworker对象并在演示者中处理它的事件吗? 例如: 在视图中: private void backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { if (WorkerProgressChange != null) { WorkerProgressChange(this, EventArgs.Empty); } } 在演示者中: _view.WorkerProgressChange += UpdateView; 这看起来合情合理吗? 有人能提供更好的模特吗? 谢谢!

如何在winforms mvp模式中实现usercontrol?

我想实现MVP模式。 我有一个具有一些文本框的用户控件,当我把它放在表单中时,我从usercontrol调用一个方法并填充文本框。 但在mvp模式中,我不知道如何访问usercontrol1.fill() 。 你有一个可以帮助我的例子吗?

批判我简单的MVP Winforms应用程序

我试图围绕C#/ Winforms应用程序中使用的MVP模式。 所以我创建了一个简单的“记事本”,就像应用程序一样,试图找出所有细节。 我的目标是创建一些能够执行open,save,new的经典windows行为以及在标题栏中反映已保存文件名称的内容。 此外,当有未保存的更改时,标题栏应包含*。 所以我创建了一个视图和一个管理应用程序持久性状态的演示者。 我考虑过的一个改进就是打破文本处理代码,以便视图/演示者真正是一个单一用途的实体。 这是一个参考屏幕截图… 我在下面列出了所有相关文件。 我对我是否以正确的方式完成它或者是否有改进方法的反馈感兴趣。 NoteModel.cs: public class NoteModel : INotifyPropertyChanged { public string Filename { get; set; } public bool IsDirty { get; set; } string _sText; public readonly string DefaultName = “Untitled.txt”; public string TheText { get { return _sText; } set { _sText = value; PropertyHasChanged(“TheText”); } […]

winform的MVP框架

我正在一个新项目工作,我想实现MVP模式。 有一个使用这种模式的winforms框架? 我检查了CAB,但我的项目实现起来并不复杂,我搜索更简单的实现和使用。 谢谢!

C#WinForms模型 – 视图 – 演示者(被动视图)

我正在用C#开发一个WinForms应用程序。 我在GUI编程方面经验有限,而且我必须在飞行中学到很多东西。 话虽这么说,这就是我正在建设的。 请参阅常规GUI查看以下链接: GUI http://img227.imageshack.us/img227/1084/program0.jpg 现在,我已经做了很多工作,但是在非常糟糕的自治设计模式中。 我不知道该项目是否会达到一定的规模,因此,是时候进行一些重大的重构了。 我一直在研究GUI设计模式,我希望实现的模式是被动视图(参见http://martinfowler.com/eaaDev/PassiveScreen.html )。 我正在寻找一些如何将这一切融合在一起的帮助。 背景: 1)根据用户在“TreeView”中单击的内容,左下角的“列表”将显示可填充“编辑器”区域的对象列表。 这些对象可能是TextBox或DataGridView。 用户切换列表以选择他/她想要在“编辑器”中看到的内容 2)模型本质上是一个包含数据和配置文件的文件夹。 有一个外部程序在给定目录上运行,创建输出文件/文件夹等。我正在开发的这个程序旨在以用户友好的方式有效地管理/配置这些对象 3)我一直在做的事情的问题是它几乎不可能测试,因此转向MVP式的被动视图设计模式 我试图让它成为独立于View的程序。 我无法找到任何更复杂的交互式视图与被动视图模式一起使用的示例。 问题: 1)我是否需要为程序的整个“外观”实现一个大的接口/视图,然后为每个TreeView,Editor,Logger等实现子接口/子视图? 或者这样做有更好的“结构”吗? 2)当从视图“移交”事件到演示者/控制器时(无论你想使用什么术语WRT被动视图设计模式),我应该怎么做? 有时我有简单的属性需要更新,有时我需要一系列的步骤来展开。 我会喜欢这个主题的建议和建议。 我已经浏览了互联网,但我没有找到足够的例子来帮助我继续这个项目。 提前致谢! 丹尼尔

MVP和多个用户控件

我正在尝试使用MVP模式,我遇到了一个设计问题。 我正在开发一个具有多个UserControl的应用程序。 UserControls本身彼此无关,只代表实际模型的一个子集。 根据我的阅读,人们倾向于说每个视图应该使用一个Presenter。 这似乎有道理,但如果我有30个UserControls,我真的想要30个演示者吗? 另一方面,如果我有1个Presenter和1个View代表整个“应用程序”视图,那么我将拥有膨胀的View和Presenter界面。 然后每个View都必须实现与它无关的方法。 我的问题是,有没有更好的方法来处理多个UserControls,或者我应该为每个View创建一个Presenter?

两个相同类型的对象的InvalidCastException

我有这个奇怪的问题,我无法处理自己。 设计为singleton的mvp-project模型中的类会导致InvalidCastException。 在此代码行中找到错误源,其中反序列化对象被分配给类的实例变量: engineObject = (ENGINE)xSerializer.Deserialize(str); 每当我尝试将一个UserControl添加到表单或不同的UC时,就会发生这种情况。 我所有的UC都有一个特殊的演示者,可以访问上面提到的单例类的实例变量。 这是我在尝试在某处添加UC时得到的结果: ‘System.TypeInitializationException:’MVP.Model.EngineData’的类型初始值设定项引发了exception。 —-> System.InvalidCastException:[A]引擎无法转换为[B]引擎。 类型A源自位于'[…] \ AppData \ Roaming \ Microsoft \ VisualStudio \ 9.0 \ ProjectAssemblies \的上下文’LoadNeither’中的’MVP.Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null’ uankw1hh01 \ MVP.Model.dll”。 类型B源自位于'[…] \ AppData \ Roaming \ Microsoft \ VisualStudio \ 9.0 \ ProjectAssemblies \的上下文’LoadNeither’中的’MVP.Model,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null’ […]

如何使用MVP将服务层消息/错误传达给更高层?

我目前正在从UI编写ASP.Net应用程序。 我正在实施一个MVP架构,因为我厌倦了Winforms,并希望能够更好地分离关注点。 因此,对于MVP,Presenter处理由View引发的事件。 这是我用来处理用户创建的一些代码: public class CreateMemberPresenter { private ICreateMemberView view; private IMemberTasks tasks; public CreateMemberPresenter(ICreateMemberView view) : this(view, new StubMemberTasks()) { } public CreateMemberPresenter(ICreateMemberView view, IMemberTasks tasks) { this.view = view; this.tasks = tasks; HookupEventHandlersTo(view); } private void HookupEventHandlersTo(ICreateMemberView view) { view.CreateMember += delegate { CreateMember(); }; } private void CreateMember() { if (!view.IsValid) […]

事件冒泡和MVP:ASP.NET

我正在努力学习MVP 它在ASP.NET中使用Web表单。 我有两个用户控件CurrentTimeView.ascx和MonthViewControl.ascx。 CurrentTimeView显示时间。 有一个文本框可以在同一个控件中添加天数。 新获得的日期称为“结果日期”。 单击按钮添加天数时,会引发一个事件“myBtnAddDaysClickedEvent”。 在MonthViewControl上,有一个标签显示“结果日期”的月份。 目前我正在为变量“monthValueToPass”设置一个样本值(因为我不知道如何正确地做到这一点)。 如何设置monthValueToPass变量的值以使其符合MVP模型? string monthValueToPass = “TEST”; monthPresenter.SetMonth(monthValueToPass); 期望是创建易于进行unit testing的MVP,并且不违反MVP架构。 注意:虽然这是一个简单的例子,但我期待使用MVP和validation机制在GridView控件中进行数据绑定的scalablt回答。 注意:可以查看完全独立的演示者吗? 注意:每个用户控件都是单独的视图 注意:同一个演示者可以有多个视图(对于不同用户的不同控件,基于他们的认可吗?) 指南 模型视图演示者 – 指南 – 完整代码 – using System; public interface ICurrentTimeView { //Property of View DateTime CurrentTime { set; } //Method of View void AttachPresenter(CurrentTimePresenter presenter); } using System; public interface IMonthView { […]