MVP模式WinForms:如何正确更新UI?

时间:2016-11-12 09:48:22

标签: c# winforms mvp

鉴于以下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
        }
    }

1 个答案:

答案 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