MVP模式和数据绑定

时间:2019-06-24 12:57:16

标签: c# mvp

我正在尝试开发一个测试项目,以学习MVP模式的逻辑。

视图是带有面板的简单控制器(在运行时添加到主窗体中)

模型是一个简单的类,包含一个人的数据(姓名,姓氏)

我坚持使用控制器定义,因为我不想犯错误并且不尊重MVP模式。

我想做的是: 按下一个按钮(视图),并在面板上填充包含数据库中人员数据的标签。

演示者有一个视图实例和一个模型,当我按下按钮时,演示者将从视图中接收事件。

我的疑问是:在演示者周围发现的示例中,仅传递了模型的一个实例,但是在这种情况下,我应该绑定到多个标签。

将标签添加到视图的正确方法是什么?

namespace linqProject.Agenti.Presenter
{
    class AgentiPresenter : IAgentiPresenter
    {
        IAgentiModel agentiModel;
        IAgentiView agentiview;
        public AgentiPresenter(IAgentiModel _agentiModel, IAgentiView _agentiView)
        {
            agentiModel = _agentiModel;
            agentiview = _agentiView;
            WireUpViewEvents();
        }

        private void WireUpViewEvents()
        {
            agentiview.onLoad += Agentiview_onLoad;
        }

        private void Agentiview_onLoad(object sender, EventArgs e)
        {
            BindingData(sender);
        }

        private void BindingData(object sender)
        {
            //Control controllo = null;     
            try
            {
                //Control controllo = ((Control)sender).Parent;
                //IEnumerable<Control> controlli = FoundControls.FilterControls(controllo, c => c.Name != null && c.Name.Equals("panel1"));

                using (var ctx = new contactsEntities())
                {
                    var student = (from s in ctx.AGENTI
                                   select s);
                }
            }
            catch (Exception ex)
            {

            }
        }
    }
}

在主表单中,我创建演示者:

Agenti.View.AgentiView av = new Agenti.View.AgentiView();
this.Controls.Add(av);

Agenti.View.IAgentiView Iav = av;
Agenti.Model.IAgentiModel Iam = new Agenti.Model.AgentiModel();

new Agenti.Presenter.AgentiPresenter(Iam, Iav);

我在Linq中做了一个函数来获取pannel实例,所以在演示者中我有面板,但是如果我添加带有循环的标签,它们将不会填充模型,而且我似乎也不尊重MVP模式。

您能解释一下如何继续遵守MVP模式吗? 我想通过在运行时使用数据库中的数据将标签添加到视图中来填充标签

0 个答案:

没有答案