Binding ListPicker.SelectedIndex Problem

8

Ich versuche eine wechselseitige Bindung des SelectedIndex-Attributs eines ListPickers in einem Windows Phone 7-Benutzersteuerelement durchzuführen.

Die folgende Ausnahme wird ausgelöst, wenn ich den DataContext einstelle: SelectedIndex must always be set to a valid value.

Dies ist der XAML-Code                                                                       

%Vor%

Und der Code dahinter in DataContext

%Vor%

Einen Haltepunkt in PickerSelectedIndex.get setzen Ich kann sehen, dass es korrekt zurückgegeben wird ( 0 ). Ich bin sicher, dass das Problem SelectedIndex="{Binding PickerSelectedIndex, Mode=TwoWay}" ist, weil das Löschen dieser Zeile das Problem löst, und ich kann den ListPicker korrekt mit den Daten von MyList geladen sehen.

Ich kann nicht sehen, wo das Problem ist ...

    
Michele Gargiulo 17.05.2011, 15:04
quelle

5 Antworten

5

Das Verschieben von SelectedIndex nach ItemsSource hat das Problem gelöst.

Dies ist das Arbeits-Snippet

%Vor%

Hat jemand eine Erklärung dafür?

    
Michele Gargiulo 18.05.2011, 07:09
quelle
3

Meine Annahme wäre, dass die Bindung mit einem Standardwert von Null angewendet wird, wenn sie erstellt wird und bevor die Elemente vorhanden sind. Es wird daher versucht, das erste Element (mit einem Index von null) auszuwählen, bevor das Element erstellt wird.

Stellen Sie sicher, dass die ViewModel-Eigenschaft von PickerSelectedIndex standardmäßig auf -1 gesetzt ist.
Möglicherweise möchten Sie auch das Festlegen der Bindung verzögern, bis die Elemente erstellt wurden.

    
Matt Lacey 17.05.2011 15:15
quelle
1

Matt Lacey hat recht; Bindung findet statt, bevor die Datenelemente aufgefüllt werden & amp; daher der Fehler. Wenn Sie einen Event-Handler für SelectionChanged haben, werden Sie bemerken, dass ein Breakpoint darin beim Laden der Page / listpicker getroffen wird. Hier ist eine Möglichkeit, dieses Initialisierungsproblem zu umgehen:

%Vor%     
Sam Basu 17.05.2011 17:03
quelle
1

Ich hatte das gleiche Problem und die Reihenfolge der Eigenschaften in XAML hat nicht geholfen. In meinem Fall bin ich ItemsSource an eine Eigenschaft in einer StaticResource gebunden, bin aber SelectedIndex mit einer Eigenschaft des ViewModels meiner Seite gebunden. In dem Moment, als ich die Bindung von ItemsSource änderte, um an eine Eigenschaft auf dem ViewModel selbst zu binden (d. H. Eine Eigenschaft der StaticResource duplizierte), ging mein Problem verloren und ich konnte auch eine Zwei-Wege-Bindung für SelectedIndex durchführen.

    
Priya 01.06.2011 13:10
quelle
1

Ich habe das gleiche Problem mit meiner App gefunden. Aber ich habe bemerkt, dass es passiert, wenn ich alle Elemente der Liste lösche, die an den ListPicker im ViewModel gebunden sind. Es ist also nicht notwendig, SelectedIndex mit einer anderen Eigenschaft zu verknüpfen, da das Problem nur von der begrenzten Liste abhängt. Hier ist mein Code, der für mich funktioniert:

%Vor%

Das Listenansichtsmodell:

%Vor%

Der Handler für SelectionChanged:

%Vor%

Wo Corsi ist der Klassentyp der Liste.

Hier ListPicker Vorlage:

%Vor%

Und schließlich, die Methode delete, die überprüft, ob die von IsolatedStorage zurückgegebene Liste leer ist, wenn ja, lege ich ein falsches leeres Element in die Liste, die an den ListPicker gebunden ist, um den hier erwähnten Fehler nicht zu erhalten post.

%Vor%

Das Seltsame war, dass, wenn die Liste beim Laden der Seite leer war, nichts passiert. Stattdessen löste die Anwendung beim Entfernen des letzten Elements aus der Liste die Exception "SelectedItem muss immer auf einen gültigen Wert gesetzt werden Wert". Jetzt ist das Problem gelöst.

    
user1559304 28.07.2012 08:22
quelle