2010-12-11 5 views
3

J'essaie de définir la valeur/selecteditem d'un contrôle listpicker - à partir de la boîte à outils silverlight pour Windows Phone 7 (lorsque l'utilisateur veut modifier une entrée en XML, il extrait les données de IO et le définit dans les zones de texte/listpickers).Comment définir l'élément sélectionné

J'essaie d'utiliser actuellement:

ListPickerSub.SelectedItem = sub; 

(sous est une chaîne)

Mais il jette un System.InvalidOperationException

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

Qu'est-ce que 'sub'? Appartient-il réellement à la liste? –

+0

c'est une valeur de l'un des éléments dans le stockage oui, disons que j'utilisais xElement ("subElement"). Valeur pour définir la liaison de données. sub est une valeur identique à la valeur de subElement. J'ai aussi essayé (juste pour tester) en réglant statiquement le contenu du listpicker: lundi dimanche Jamie

Répondre

3

SelectedItem attend un ListPickerItem (qui est l'un des éléments de la liste). Vous lui passez une chaîne - d'où l'erreur.

Vous trouverez peut-être plus simple de définir le SelectedIndex.

Il est difficile de donner un exemple pertinent de définition de SelectedItem sans savoir avec quoi vous remplissez la liste.

Edit:
Voici un exemple de la façon dont vous pouvez lier à des chaînes. Sans un exemple réalisable de ce que vous liez réellement à l'itemource, c'est ce que je peux faire de mieux. (Il suffit de donner le nom de l'objet ou code partiel ne suffit pas.)

En supposant:

<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> 

Ensuite, je peux lier le contenu avec:

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"; 
} 

et régler le SelectedItem avec :

ListPickerSub.SelectedItem = "sunday"; 
+0

Je peuplant la liste comme ceci: ' < TextBlock Name = "{Sous-titre de liaison}" Text = "{Sous-titre de liaison}" Margin = "0" /> ' – Jamie

+0

@Jamie mais que transmettez-vous en tant que ItemSource ? –

+0

Sous-nom de liaison. J'ai essayé d'utiliser: object index = SubTxt.FindName (sub); puis en réglant le selecteditem comme index mais index retourné toujours comme nul – Jamie

0

Sûrement que vous souhaitez définir les données dans la source de données sous-jacente, puis simplement actualiser votre liste?

2

Quelque chose comme ce qui suit:

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

Vous devrez peut-être convertir le contenu en TextBlock et modifier le code en conséquence. Ce qui précède fonctionne pour mon cas où ListPicker est rempli dynamiquement en utilisant ListPickerItem.

Questions connexes