2012-01-03 10 views
5

Ho due ListBox nella mia applicazione WinForms, ho assigne un datasource per entrambi come segue:Un DataSource per più controlli

private void MakeMeasurementUnits() 
{ 
    var units = new List<MeasurementUnit> 
        { 
         new MeasurementUnit {Name = "Current", SiUnit = "A"}, 
         new MeasurementUnit {Name = "Voltage", SiUnit = "V"}, 
         new MeasurementUnit {Name = "Time", SiUnit = "s"}, 
         new MeasurementUnit {Name = "Temprature", SiUnit = "°C"} 
        }; 

    lbxXunit.DataSource = units; 
    lbxYunit.DataSource = units; 
} 

La cosa strana è (o forse perché è la mia prima volta !!), nel modulo quando faccio clic sugli elementi di una di queste lisbox, viene selezionato anche lo stesso elemento nella seconda casella di riepilogo. È un comportamento predefinito? come prevenire questo? Se questo è un comportamento predefinito, cosa è utile a riguardo?

ho trovato il rimedio rapido per essere fare due diverse origini dati (stessa cosa con un altro nome)

risposta

5

La casella di riepilogo sembra mettere in cache la fonte vincolante. Questo è un comportamento predefinito. Se si vuole evitare questo, il modo più semplice è quello di creare una copia della lista di legarsi alla seconda fonte di dati:

lbxXunit.DataSource = units; 
lbxYunit.DataSource = units.ToList(); 

Questo è utile quando si hanno più visualizzazioni degli stessi dati e si desidera sincronizzare il selezione di questi articoli.

1

Questo è il comportamento corretto. La gestione datasource in WindowsForms tiene traccia dell'elemento selezionato sul controllo e manipola anche i dati associati.

La risoluzione che hai già trovato: assegnare 2 diversi data sources objects a questi controlli.

3

Sì, questo è un comportamento normale. Succede perché il controllo ListView utilizza un oggetto BindingSource per tracciare l'elemento attualmente selezionato. (Un elenco non ha modo di tracciare un elemento selezionato senza una BindingSource.)

Per impostazione predefinita, un DataSource in un controllo WinForms utilizza una risorsa Binding creata dal sistema stesso WinForms.

Si può leggere di più sulla BindingSource a: http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

C'è un articolo qui che potrebbe aiutare anche: http://blogs.msdn.com/b/bethmassi/archive/2007/09/19/binding-multiple-comboboxes-to-the-same-datasource.aspx

2

Il comportamento è stato notato è il comportamento di default/corretta per i controlli WinForms. Puoi ottenere ciò che cerchi impostando un nuovo BindingContext per il tuo secondo controllo listbox senza creare una copia dell'origine dati.

BindingContext

Problemi correlati