我很难将简单对象绑定到comboBox,如下所示:
public partial class Planning : Form
{
private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList());
public VisiteVisiteur visiteur = visiteurs.Last();
public Planning()
{
InitializeComponent();
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.DataBindings.Add("SelectedValue", visiteur, "", true, DataSourceUpdateMode.OnPropertyChanged);
我想绑定到整个 visiteur 对象,以便在comboBox selectedValue 更改时更新。 此时,selectedValue会更改但不会更改visiteur对象。我在这里做错了什么?
解决方案: 使用SelectedIndexChanged事件更新 visiteur 变量
public partial class Planning : Form
{
private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList());
public VisiteVisiteur visiteur = null;
public Planning()
{
InitializeComponent();
VisiteVisiteur visiteurTemp = visiteurs.Last();
comboBox1.SelectedIndexChanged += new System.EventHandler(comboBox1_SelectedIndexChanged);
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.SelectedItem = visiteurTemp;
}
public void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
visiteur = (VisiteVisiteur)comboBox1.SelectedItem;
}
答案 0 :(得分:3)
Crowcoder的答案只会将visiteur
设置为comboBox1.SelectedItem
一次。这就是您需要使用SelectedIndexChanged
如果您将会员visiteur
更改为某个属性
public VisiteVisiteur visiteur { get; set; }
然后设置数据绑定
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.DataBindings.Add("SelectedValue",
this,
"visiteur",
true,
DataSourceUpdateMode.OnPropertyChanged);
如果您仍然继续手动更新visiteur
,请使用SelectionChangesCommitted
事件代替SelectedIndexChanged
。
答案 1 :(得分:0)
使用DataSource
已设置绑定。您不想添加另一个,您想要设置作为对象实例的SelectedItem
:
comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.SelectedItem = visiteur;