2010-07-22 6 views
2

Tout ce que j'essaie de faire est de comparer, pour chaque valeur d'une liste, sa valeur avec celle choisie, puis .. définir l'indice de match choisi Pour une raison quelconque l'exception dans le titre est élevé, je ne comprends pas pourquoi quoique code:.!Impossible de convertir l'objet de type 'System.String' en exception "..Controls.SurfaceListBoxItem '

  foreach(SurfaceListBoxItem n in BackgroundsList.Items) 
     { 
      if (n.ToString() == current) BackgroundsList.SelectedItem = n; 
     } 

Merci

Répondre

2

en WPF, List.Items ne pas nécessairement contenir la collection de ListBoxItem, à la place il ne contient que des valeurs de données, et le conteneur d'éléments des données est dérivé, pour définir la valeur, vous devez simplement régler le courant sur l'élément sélectionné.

Il n'y a pas besoin d'itérer, vous pouvez simplement faire suivant,

BackgroundsList.SelectedItem = current; 
2

L'instruction C# foreach fait un casting implicite pour vous du type de l'élément retourné par Items au type SurfaceListBoxItem spécifié. Au moment de l'exécution, le string renvoyé ne peut pas être converti en SurfaceListBoxItem. Vous pouvez résoudre ce problème en utilisant var au lieu de SurfaceListBoxItem

foreach(var n in BackgroundsList.Items) 
{ 
    if (n.ToString() == current) BackgroundsList.SelectedItem = n; 
} 

Ou, bien sûr, vous pouvez utiliser LINQ:

BackgroundsList.SelectedItem = (
    from n in BackgroundList.Items 
    where n.ToString() == current 
    select n).FirstOrDefault();