Uso MVP nel mio progetto, ma sono nuovo in MVP. Ho due combobox. Quando seleziono un'opzione in una casella combinata, l'altra casella combinata deve essere riempita con nuovi dati.
Questa azione verrà eseguita nel Presenter. Ho avuto la mia vista 'view1' in Presenter, e ho introdotto Combobox1 e Combobox2 come proprietà in 'view1', perché avevo bisogno di 'DataSource', 'DisplayMember', 'ValueMember' e 'Refresh ()' nel metodo seguente.
Tuttavia, quando si utilizza un modello, è sufficiente inviare una proprietà come questa:
public string Combobox2
{
get { return comboBox1.SelectedValue.ToSstring(); }
}
nel Presenter, non nell'intero Combobox. Come posso risolvere questo problema?
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;
}
Aggiornamento:
Ho usato questo metodo:
public void OnSelectionChangeCommittedCombobox1()
{
if (View1.Combobox1SelectedIndex == -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();
View1.DataSource = new BindingSource(query, null);
View1.DisplayMember = "Value";
View1.ValueMember = "Key";
View1.Refresh();
View1.Combobox2SelectedIndex = -1;
}
Ora non ho accesso diretto alle caselle combinate.