2010-12-11 17 views
3

Ich versuche, den Wert/selecteditem eines listpicker Steuerelements zu setzen - aus dem Silverlight Toolkit für Windows Phone 7 (wenn der Benutzer einen Eintrag in XML bearbeiten möchte, zieht er die Daten aus IO und setzt es in die Textfelder/Listenpicker).Wie setze ich das selecteditem

Ich versuche zur Zeit zu verwenden:

ListPickerSub.SelectedItem = sub; 

(sub ist ein String)

aber es ist ein System.InvalidOperationException

Additional information: SelectedItem must always be set to a valid value. 
+1

Was ist 'sub'? Gehört es eigentlich zur Liste? –

+0

es ist ein Wert von einem der Elemente im Speicher ja, sagen wir, dass ich xElement ("subElement"). Value, um die Datenbindung zu setzen. sub ist ein identischer Wert wie der Wert in subElement. Ich habe auch (nur zum Testen) versucht, von der listpicker Inhalt Einstellung statisch: Montag Sonntag Jamie

Antwort

3

SelectedItem erwartet ein ListPickerItem (welches eines der Elemente in der Liste ist). Sie übergeben es eine Zeichenfolge - daher der Fehler.

Sie können die SelectedIndex einfacher einstellen.

Es ist schwierig, ein relevantes Beispiel für die Einstellung von SelectedItem anzugeben, ohne zu wissen, mit was Sie die Liste füllen.

Edit:
Hier ist ein Beispiel dafür, wie Sie Strings binden können. Ohne ein praktikables Beispiel dessen, was Sie tatsächlich an die Itemsource binden, ist dies das Beste, was ich tun kann. (Just geben den Namen des Objekts oder der Teilcode ist nicht genug.)

Unter der Annahme:

<Controls:ListPicker x:Name="ListPickerSub"> 
    <Controls:ListPicker.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" /> 
     </DataTemplate> 
    </Controls:ListPicker.ItemTemplate> 
    <Controls:ListPicker.FullModeItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" /> 
     </DataTemplate> 
    </Controls:ListPicker.FullModeItemTemplate> 
</Controls:ListPicker> 

Dann kann ich den Inhalt binden mit:

ListPickerSub.ItemsSource = SubItems(); 


private IEnumerable<string> SubItems() 
{ 
    yield return "monday"; 
    yield return "tuesday"; 
    yield return "wednesday"; 
    yield return "thursday"; 
    yield return "friday"; 
    yield return "saturday"; 
    yield return "sunday"; 
} 

und stellen die SelectedItem mit :

ListPickerSub.SelectedItem = "sunday"; 
+0

Ich bevölkern die Liste wie folgt aus: ' < TextBlock Name = "{Binding UnterName}" Text = "{Binding SubName}" Rand = "0" /> ' – Jamie

+0

@Jamie aber was übergeben Sie als ItemSource ? –

+0

Binding UnterName. Ich habe versucht, mit: Objekt Index = SubTxt.FindName (Unter); Dann setzen Sie den ausgewählten Eintrag als Index, aber der Index wurde immer als Null zurückgegeben. – Jamie

0

Sicherlich werfen Sie die Daten festlegen möchten in der zugrunde liegenden Datenquelle und dann nur Ihre Liste aktualisieren?

2

Etwas wie folgt aus:

ListPickerSub.SelectedItem = ListPickerSub.Items.First(x => (x as ListPickerItem).Content.ToString() == sub); 

Möglicherweise müssen Sie den Inhalt in TextBlock umwandeln und den Code entsprechend ändern. Das obige funktioniert in meinem Fall, in dem ListPicker dynamisch mit ListPickerItem gefüllt wird.

Verwandte Themen