从演示者(MVP)更新组合框

时间:2017-04-08 08:26:29

标签: c# combobox mvp

我在我的项目中使用MVP,但我是MVP新手。 我有两个组合框。当我在组合框中选择一个选项时,另一个组合框应填充新数据。

此操作将在Presenter中。我得到了我的观点' view1'在Presenter中,并引入了Combobox1和Combobox2作为' view1'中的属性,因为我需要' DataSource' DisplayMember' ValueMember'和'刷新()'在下面的方法中。

但是,使用模式时,发送像

这样的属性就足够了
public string Combobox2
{
    get { return comboBox1.SelectedValue.ToSstring(); }
}

进入Presenter而不是整个Combobox。我该如何解决这个问题?

public void OnSelectedIndexChangedCombobox1()
{
    if (view1.Combobox1.SelectedIndex == -1)
    {
        return;
    }

    DataTable dt = Tools.GetDataTable("A Path");

    var query =
        (from o in dt.AsEnumerable()
         where o.Field<string>("afield") == 
             farmerView.Combobox1.SelectedValue.ToString()
         orderby o.Field<string>("anotherfield")
         select new KeyValuePair<string, string>(o.Field<string>("field1"), 
             o.Field<string>("field2"))).ToList();

    farmerView.Combobox2SelectedIndexChanged -= OnSelectedIndexChangedCombobox2;

    farmerView.Combobox2.DataSource = new BindingSource(query, null);
    farmerView.Combobox2.DisplayMember = "Value";  
    farmerView.Combobox2.ValueMember = "Key";   
    farmerView.Combobox2.Refresh();
    farmerView.Combobox2SelectedIndexChanged += 
       OnSelectedIndexChangedCombobox2;

    farmerView.Combobox2.SelectedIndex = -1;
}

谢谢

1 个答案:

答案 0 :(得分:1)

你不应该将任何Android对象传递给演示者,只是在视图中获取事件(例如你的Activity)然后从演示者调用一个方法,通过传递所选项目为第二个ComboBox(我们称之为Android中的Spinner!)提供数据从第一个开始,然后presenter将调用一个View方法,填充第二个方法,View知道如何操作。

您可以查看此示例项目http://github.com/mmirhoseini/marvel和本文https://hackernoon.com/yet-another-mvp-article-part-1-lets-get-to-know-the-project-d3fd553b3e21以更熟悉MVP。