3 Stimmen

Silverlight DataGrid-Bindungsprobleme nach dem Aktualisieren oder Setzen von selectedIndex=-1

Ich habe eine Datentabelle und eine Combobox auf dem Formular. Die Combobox ist an das selectedItem der Datentabelle gebunden.

Ich lade alles gut und wenn ich verschiedene Zeilen auswähle, wird die Combobox korrekt aktualisiert.

Wenn ich jedoch datagrid.selectedIndex=-1 setze, nachdem es geladen wurde (so dass die erste Zeile nicht ausgewählt ist), funktioniert die Combobox-Bindung nicht mehr. Dies ist ein Problem.

Ich habe auch ein anderes Szenario, in dem genau das Gleiche passiert. Wenn ich die Datentabelle filtern, die Bindung an die Combobox funktioniert auch nicht mehr.

Ich bin die Datentabelle zu einer CollectionViewSource wie die folgenden binden, wo _codes eine ObservableCollection ist

            _ocvsCode = (CollectionViewSource)this.Resources["cvsCode"];
            _ocvsCode.Source = _codes;                
            dataGrid1.ItemsSource = _ocvsCode.View;

Ich weiß nicht, warum die Bindung an die Combobox nach einer Operation auf dem Datagrid fehlschlägt.

2voto

Alain Punkte 25558

Die geeignete Lösung in diesem Fall besteht darin, das ausgewählte Element der Datentabelle an eine Variable zu binden, und dann die anderen Steuerelemente ebenfalls an diese Variable zu binden. Es ist im Allgemeinen eine schlechte Praxis, UIElement-Eigenschaften direkt an andere UIElement-Eigenschaften zu binden. Dies erleichtert auch die Fehlersuche bei dem Problem, das Sie mit dem Erzwingen der selecteditem-Eigenschaft an das Kombinationsfeld zu haben scheinen.

0voto

grimus Punkte 3135

Ich bin auf das gleiche Problem gestoßen, bei dem eine ComboBox an den Wert des SelectedItem eines DataGrid gebunden ist.

Das ComboBox-Steuerelement bricht ab, wenn die Daten, die es bindet, null werden, und erholt sich nicht mehr. Ich bin mir nicht sicher, warum das so ist, aber es scheint mir ein Fehler zu sein. Wenn das DataGrid eine Spalte sortiert, setzt es zuerst sein SelectedItem auf null, führt die Sortierung durch und setzt dann SelectedItem auf den ursprünglichen Wert zurück. Wenn das SelectedItem auf Null gesetzt wird, bricht die ComboBox ab.

Hier ist mein Lösungsansatz:

Erstellen Sie eine SelectedItem-Eigenschaft für Ihre Klasse, die für den DataContext verwendet wird. Führen Sie eine Prüfung des Setters durch, die verhindert, dass er auf Null gesetzt wird. Binden Sie an diese Eigenschaft mit Ihrem DataGrid und ComboBox.

public YourItem SelectedItem
{
    get { return _selectedItem; }
    set
    {
        if (value == _selectedItem || value == null)
            return;

        _selectedItem = value;
        RaisePropertyChanged("SelectedItem");
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X