Zwei-Wege-Bindungseinstellungsproblem

8

Ich habe ein Problem mit der Zwei-Wege-Bindung mit einem Listenpicker. Ich bin in der Lage, den Wert mit c #, aber nicht in der SelectedItem=".." in Xaml. Die Bindung gibt den richtigen Wert zurück (und ist ein Wert im Listenpicker), da ich sie durch Textvergabe an einen Textblock gesendet habe.

Wenn die Seite geladen wird, verursacht die für den Listenpicker verwendete Bindung System.ArgumentOutOfRangeException

Der Code, den ich verwende, ist:

%Vor%

Und im xaml:

%Vor%

Die StaticResource AppSettings ist eine Ressource aus einer separaten .cs-Datei.

%Vor%

Vielen Dank im Voraus

    
Jamie 17.12.2010, 16:17
quelle

4 Antworten

5

Ich habe Reflektor verwendet, um die Quelle dieser Ausnahme zu finden. In ListPicker.cs wird die folgende Methode überschrieben.

%Vor%

In dieser Methode wird die folgende Zeile die Ausnahme verursachen, wenn SelectedItem gesetzt ist und SelectedIndex -1 ist (was es ist, wenn es nicht gesetzt ist, bevor es geladen wird). Wenn SelectedItem nicht gesetzt ist, wird diese Zeile nie erreicht (daher keine Ausnahme).

%Vor%

Um das zu umgehen (bis sie das behoben haben) habe ich ein paar Vorschläge.

Problemumgehung 1

Wenn Sie den Startindex kennen, der von der TwoWay-Bindung erzeugt wird, können Sie auch die SelectedIndex-Eigenschaft festlegen und die TwoWay-Bindung funktioniert

%Vor%

Problemumgehung 2

Benutze das Geladene Ereignis und setze stattdessen die Bindung von dort aus

%Vor%     
Fredrik Hedblad 26.12.2010, 00:50
quelle
0

Feuern Sie die relevanten Eigenschaften geändert Ereignisse?

Stellen Sie sicher, dass SelectedItem eine bidirektionale Bindung haben kann.Wenn Sie nicht versuchen, einen ItemContainerStyle zu definieren und die IsSelected-Eigenschaft an eine entsprechende Eigenschaft in Ihrem Objekt zu binden, wird das ausgewählte Element trivial.

    
Steve Psaltis 17.12.2010 16:26
quelle
0

Wenn AppSettings eine Sammlung ist, wird dies nicht funktionieren. Sie müssen SelectedItem an einen Skalarwert binden und leider unterstützt "Silverlight 3.7" auf WP7 keine Indexer in Bindungen.

Bitte verwenden Sie in Ihrem Programm auch keine Ausnahmen als Flusskontrolle, sondern tun Sie etwas wie folgt:

%Vor%     
joshperry 17.12.2010 16:31
quelle
0

Anstatt die Bindung zu verwenden, setze ich einfach die selecteditem, wenn die Seite geladen wurde, und benutze einen selektierbaren Event-Handler, um den Wert ohne Bestätigung zu aktualisieren (mit einer Schaltfläche zum Speichern).

    
Jamie 19.12.2010 13:33
quelle