【问题标题】:Update a combobox from a presenter (MVP)从演示者 (MVP) 更新组合框
【发布时间】:2017-09-03 15:34:03
【问题描述】:

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

此操作将在 Presenter 中进行。我在 Presenter 中获得了视图“view1”,并在“view1”中引入了 Combobox1 和 Combobox2 作为属性,因为在下面的方法中我需要“DataSource”、“DisplayMember”、“ValueMember”和“Refresh()”。

但是,当使用模式时,发送一个类似的属性就足够了

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;
}

谢谢

【问题讨论】:

    标签: c# combobox mvp


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多