Laden...

Datenbindung an eine Combobox

Erstellt von Gremgiz vor 12 Jahren Letzter Beitrag vor 12 Jahren 803 Views
G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 12 Jahren
Datenbindung an eine Combobox

Hallo zusammen,

Eine Combobox will einfach nicht den aktualisierten Wert an eine Variable durchreichen.

Die DataSource der Combobox ist ein Dictionary und wie folgt eingebunden:


Combo1.DisplayMember = "Value";
Combo1.ValueMember = "Key";
Combo1.DataSource = new BindingSource(myDictionary, null);

Das Datenbining sieht wie folgt aus


Combo1.DataBindings.Add("SelectedValue", MyStruktur, "MyValue1");

Der Typ myStruktur is mit INotifyPropertyChanged versehen und funktioniert auch für Textfelder wunderbar. Hier die Implementierung


public class TicketValue : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }

        private int myValue1;
        public int MyValue1
        {
            get
            {
                return this.myValue1;
            }

            set
            {
                this.myValue1 = value;
                NotifyPropertyChanged("MyValue1");
            }
        }
}

Wenn ich nun in der Form das Event SelectedValueChanged für die Combobox aufrufe, wird der Wert in MyValue nicht aktualisiert. Hat irgendjemand eine Idee, was ich falsch mache?

Erreichen möchte ich, dass der Key an die Variable übergeben wird.

Danke
Gremgiz

G
Gremgiz Themenstarter:in
106 Beiträge seit 2006
vor 12 Jahren

Nach etlichen weiteren Versuchen habe ich eine mögliche Lösung gefunden, die ich Euch nicht vorenthalten möchte.

Tests haben ergeben, dass die Datenbindung durchaus funktioniert, nur zu spät. Sobald die Combobox den Fokus verliert, wird die Datenbindung auch korrekt durchgeführt. Wenn aber noch Events dazwischen hängen, die auf den aktualisierten Wert angewiesen sind, hat man erst mal ein Problem.

Die Lösung erfolgte in zwei Schritten:

  1. Datenbindung ändern

Ändern von

Combo1.DataBindings.Add("SelectedValue", MyStruktur, "MyValue");

in

Combo1.DataBindings.Add("SelectedValue", MyStruktur, "MyValue", false, DataSourceUpdateMode.OnPropertyChanged);

Damit wird die Aktualisierung früher erzwungen. Leider noch nicht früh genug für das Event SelectedValueChanged.

  1. Event ändern

Events werden ja in einer definierten Reihenfolge durchlaufen. Ich brauche ein Event, dass erst nach dem Property Change kommt -> SelectedIndexChanged. Wird dieses Event verwendet, erfolgt die Aktualisierung der gebundenen Daten bevor das Event feuert und man hat innerhalb des Events die Daten, die man benötigt.

Ich hoffe das hilft auch anderen...

Gruß
gremgiz