鉴于以下MVP设置,您如何更新winforms UI?这是我第一次尝试实施MVP,我相信我一直在关注MVP的“被动视图”实现。
我真的不希望我的模型引用演示者,因为我认为这违背了MVP模式的想法,但那么Presenter的目的不是更新视图吗?显然不希望我的模型更新我的视图。如果我在思考中犯了错误,请告诉我!
public class HomePresenter
{
Item item;
Model model
SomeTask()
{
model.AnotherTask(item);
}
}
public class Model
{
public void AnotherTask(Item item)
{
/* SOME COMPLEX LOGIC HERE */
if (item.BoolProperty)
// How do I write "Success" to richtextbox in View
else
// How do I write "Failure to richtextbox in View
}
}
答案 0 :(得分:0)
您的演示者应该同步您的视图和模型。视图仅显示数据。模型知道业务逻辑和真实的"数据和Presenter将Model数据链接到View。因此,您无法从模型中访问Richtextbox。相反,您可以从Presenter中执行此操作。要保持独立,您应该使用Interfaces。因此,您无法直接访问Presenter或Model中的View元素。
创建IView接口和IModel接口。他们两个都是 您的演示者已知。
您的示例可能如下所示:
public class HomeView : IHomeView
{
public string Text
{
get {return richtextbox.Text;}
set {richtextbox.Text = value;}
}
}
public class HomePresenter
{
IHomeView view;
IModel model;
HomePresenter(IHomeView view, IModel model)
{
view = view;
model = model;
//Update View
view.Text = model.Text;
}
public void UpdateModel
{
model.Text = view.Text; //Set the Model Property to value from Richtextbox
}
}
public class Model : IModel
{
public string Text {get;set} //Property which represent Data from Source like DB or XML etc.
}
您会找到另一个示例here。