ComboBox no actualizará su lista de visualización a menos que cambie las selecciones primero

Actualización: Verifiqué la respuesta antes de probarla completamente, todavía no funciona. Actualicé el código a continuación, por lo que debería poder pegarlo en un proyecto WinForms vacío y debería compilarse.

ACTUALIZACIÓN: He descubierto que si cambio el elemento seleccionado en el ComboBox a cualquier otro elemento, ahora se comporta como se esperaba (en mi código a continuación cambiaría de test1 a test2). Como todavía no he recibido ninguna respuesta, cambio la pregunta a esto.

¿Por qué tengo que cambiar a un elemento diferente en el cuadro combinado antes de que muestre los cambios que realizo en la fuente de datos subyacente?

Aquí hay un caso de prueba rápida de lo que está sucediendo.

Cambiotest1 atest1asdf texto en txtBrokenhaga clic para confirmar el cambioel texto en el cuadro combinado no se actualiza.Cambiar el cuadro combinado a test2cambiotest2 atest2asdf texto en txtBrokenhaga clic para confirmar el cambioel texto en el cuadro combinado muestra inmediatamente que 'test2asdf' todavía se muestratest1 para el primer elemento en el menú desplegablecambiar atest1muestra el cuadro combinadotest1 muestra el cuadro de textotest1asdfactualizar cuadro de texto atest1asdcuadro combinado muestra inmediatamentetest1asd

Aparte de entre bastidores, cambiar el elemento seleccionado en la carga y volver a cambiarlo (esto parece un truco) ¿cómo puedo solucionar esto?

Tengo un cuadro combinado enlazado a unBindingSource&nbsp;atado a unList<Holder>&nbsp;TieneHolder.Name&nbsp;como su valor de visualización. También tengo un cuadro de texto vinculado aHolder.Name&nbsp;pero si cambio el texto en el cuadro de texto, no cambiará lo que se muestra en el cuadro combinado. Cambiar los elementos seleccionados y volver a mostrar mostrará el texto actualizado en el cuadro de texto, pero aún tendrá el valor anterior mostrado en el cuadro combinado. ¿Cómo hago para actualizar el elemento en el cuadro combinado?

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace Sandbox_Form
{
    public class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            lstBroken = new BindingList<Holder>();
            lstBroken.Add(new Holder("test1"));
            lstBroken.Add(new Holder("test2"));
            bsBroken = new BindingSource(lstBroken, null);
            cmbBroken.DataSource = bsBroken;
            cmbBroken.DisplayMember = "Name";
            cmbBroken.SelectedIndex = 0;
            txtBroken.DataBindings.Add("Text", bsBroken, "Name");
            txtBroken.TextChanged += new EventHandler(txtBroken_TextChanged);

        }

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        void txtBroken_TextChanged(object sender, EventArgs e)
        {
            ((Control)sender).FindForm().Validate();
        }
        private BindingSource bsBroken;
        private BindingList<Holder> lstBroken;
        private ComboBox cmbBroken;
        private TextBox txtBroken;
        private Label label1;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.cmbBroken = new System.Windows.Forms.ComboBox();
            this.txtBroken = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // cmbBroken
            // 
            this.cmbBroken.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
            this.cmbBroken.FormattingEnabled = true;
            this.cmbBroken.Location = new System.Drawing.Point(12, 32);
            this.cmbBroken.Name = "cmbBroken";
            this.cmbBroken.Size = new System.Drawing.Size(94, 21);
            this.cmbBroken.TabIndex = 0;
            // 
            // txtBroken
            // 
            this.txtBroken.Location = new System.Drawing.Point(13, 60);
            this.txtBroken.Name = "txtBroken";
            this.txtBroken.Size = new System.Drawing.Size(93, 20);
            this.txtBroken.TabIndex = 1;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(13, 13);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(41, 13);
            this.label1.TabIndex = 2;
            this.label1.Text = "Broken";
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.txtBroken);
            this.Controls.Add(this.cmbBroken);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private void cmbWorks_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
    public class Holder
    {
        public Holder(string name)
        {
            Name = name;
        }
        private string _Name;
        public string Name
        {
            get { return _Name; }
            set
            {
                _Name = value;
            }
        }
    }
}

Si me ato a unList<String>&nbsp;en lugar de usarHolder.Name&nbsp;funciona como se esperaba (esto es solo una simple maqueta, la clase real tiene más que un nombre, por lo que una lista de cadenas no funcionará). Creo que esto es una pista de lo que está mal, pero no sé qué es. Usar un Observable en lugar de una lista no hace ninguna diferencia.