允许视图使用Presenter的模型属性进行MVP中的数据绑定

时间:2018-04-02 20:03:06

标签: c# winforms data-binding mvp

我有一个Winform Model View Presenter(MVP)应用程序,它在实例化时通过接口传入Presenter对象。 Presenter(ProductPresenter)具有模型(ProductModel)属性。我允许View(ProductView)访问ProductPresenter的ProductModel属性来设置数据绑定。 ProductView下方使用其ProductPresenter实例访问其ProductModel" City"在load事件期间在ProductView上设置数据绑定到文本框控件的属性:

        textBoxCity.DataBindings.Add(
    new Binding("Text", this.ProductPresenter.ProductModel, 
"City", false, DataSourceUpdateMode.OnPropertyChanged));

所有带有INotifyPropertyChanged的getter和setter的设置都是使用ProductModel属性在ProductPresenter中定义的。

我唯一担心的是我必须让View了解演示者。在此之前,我的View不需要知道Presenter,因为它引发了Presenter订阅的事件,以便让Presenter知道发生了什么并让它有机会告诉View基于什么做收到的事件通知。我无法找到一种简单的方法来允许ProductPresenter使用事件通知将ProductModel属性数据绑定到ProductView文本框,而View没有引用ProductPresenter。

是否有另一种方法可以实现对View和相关模型的数据绑定,而不是上面针对WinForms MVP所描述的维护和支持实用的内容。如果有人知道任何问题,上述方法将创建请评论。提前致谢。

1 个答案:

答案 0 :(得分:1)

视图不应该知道模型或演示者。处理演示者中的数据绑定:

    View.textBoxCity.DataBindings.Add(
            new Binding("Text",ProductModel, 
            "City", false, DataSourceUpdateMode.OnPropertyChanged));