C# Winforms组合框数据绑定整个对象(无数据成员)

C# Winforms组合框数据绑定整个对象(无数据成员),c#,winforms,data-binding,combobox,C#,Winforms,Data Binding,Combobox,我很难将简单对象绑定到组合框,如下所示: public partial class Planning : Form { private static BindingList<VisiteVisiteur> visiteurs = new BindingList<VisiteVisiteur>(Program.model.VisiteVisiteur.ToList()); public VisiteVisiteur visiteur = visiteurs.

我很难将简单对象绑定到组合框,如下所示:

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);
公共部分课程计划:表格
{
private static BindingList visiteurs=新的BindingList(Program.model.VisiteVisiteur.ToList());
public visiteur visiteur=visiteurs.Last();
公共规划()
{
初始化组件();
comboBox1.DataSource=访问者;
comboBox1.DisplayMember=“Name”;
comboBox1.DataBindings.Add(“SelectedValue”,visiteur,”,true,DataSourceUpdateMode.OnPropertyChanged);
我想绑定到整个visiteur对象,这样它会随着组合框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;
    }
公共部分课程计划:表格
{
private static BindingList visiteurs=新的BindingList(Program.model.VisiteVisiteur.ToList());
公共访问者visiteur visiteur=null;
公共规划()
{
初始化组件();
VisiteVisiteur visiteurTemp=visiteurs.Last();
comboBox1.SelectedIndexChanged+=新系统.EventHandler(comboBox1\u SelectedIndexChanged);
comboBox1.DataSource=访问者;
comboBox1.DisplayMember=“Name”;
comboBox1.SelectedItem=visiteurTemp;
}
public void组合框1\u SelectedIndexChanged(对象发送方,事件参数e)
{
visiteur=(VisiteVisiteur)组合框1.SelectedItem;
}

使用
DataSource
已设置绑定。如果不想添加另一个绑定,则需要设置对象实例的
SelectedItem

comboBox1.DataSource = visiteurs;
comboBox1.DisplayMember = "Name";
comboBox1.SelectedItem = visiteur;

Crowcoder的答案将
visiteur
设置为
comboBox1。只选择一次EdItem
。这就是为什么您需要使用手动更新
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

更改为
combox1.DataBindings.Add(“SelectedValue”,这是“visiteur”,true,DataSourceUpdateMode.OnPropertyChanged)
我已经尝试过并得到了这个错误:无法绑定到从对象创建的数据源上的属性或列visiteur。当前接受的答案完全错误。请使用
visiteur
属性,然后使用@Fabio code。您的代码只做了一半的工作,因为我希望visiteur自动将其值更改为组合盒子selectedValue@Nerimah,
visiteur
是值。什么意思?不,visiteur是绑定到combobox值的变量,它需要取comboBox1的值。selectedValue@Nerimah,我认为您不了解组合框是如何工作的。如果我了解您,则您需要在co的selectedindexchanged事件中执行的所有操作MBOBOX被设置为<代码> VisteUr= COMBOBOX1,SelectedItem;< /Cord> @ Nelimar,如果正确答案是正确的,对于未来的Google来说更好。考虑不接受我的。