[c#] ComboBox SelectedItem vs SelectedValue


Answers

Sospetto che la proprietà SelectedItem del ComboBox non cambi fino a quando il controllo non è stato convalidato (che si verifica quando il controllo perde lo stato attivo), mentre la proprietà SelectedValue cambia ogni volta che l'utente seleziona un elemento.

Ecco un riferimento agli eventi di messa a fuoco che si verificano sui controlli:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.validated.aspx

Question

Il codice seguente funziona come previsto: MyProperty sul modello viene aggiornato quando l'utente seleziona un nuovo elemento nel menu a discesa.

comboBox1.DataBindings.Add("SelectedValue", myModel, "MyProperty", true,
DataSourceUpdateMode.OnPropertyChanged);

Di seguito, tuttavia, non funziona nello stesso modo e l'aggiornamento del modello non viene attivato finché lo stato attivo di input non si sposta su un altro controllo nel modulo:

comboBox1.DataBindings.Add("SelectedItem", myModel, "MyProperty", true, 
DataSourceUpdateMode.OnPropertyChanged);

Qualcuno sa perché? Non so nemmeno da dove iniziare a indagare sulla causa. Puntatori nella giusta direzione per avviare l'indagine o una spiegazione esplicita sarebbero ugualmente apprezzati.

A parte : per i miei scopi, ho finito per legare sia a SelectedItem che a SelectedValue . In questo modo ottengo aggiornamenti istantanei del modello basati su modifiche dell'interfaccia utente (tramite il binding SelectedValue ) e aggiornamenti dell'interfaccia utente basati su modifiche al modello programmatico (tramite l'associazione SelectedItem ).




Se vuoi che Selected.Value sia lavoro, devi seguire quanto segue

1. Set DisplayMember
2. Set ValueMember
3. Set DataSource (not use Items.Add, Items.AddRange, DataBinding etc.)

Il punto chiave è Set DataSource!




Links