Winforms comboBox数据绑定整个对象(无dataMember)

时间:2016-05-01 11:09:04

标签: c# winforms data-binding combobox

我很难将简单对象绑定到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;
    }

2 个答案:

答案 0 :(得分:3)

Crowcoder的答案只会将visiteur设置为comboBox1.SelectedItem一次。这就是您需要使用SelectedIndexChanged

手动更新的原因

如果您将会员visiteur更改为某个属性

,您可以进行正确的数据绑定(感谢Ivan Stoev的评论)
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;