2010-11-24 9 views
0

J'ai un databound Listbox lié à une liste générique comme suit (fournisseur est une classe très simple qui comprend une seule propriété (Name)du réglage sélectionné sur Listbox dans Silverlight - Windows Phone 7

ProviderList = new List<Provider>(); 
//Populate list 
Providers.ItemsSource = ProviderList; 

. Je peux enregistrer l'élément sélectionné sans problème, mais je ne parviens pas à définir l'élément sélectionné à partir du code plus tard, je suis en train de le faire comme suit:..

int x = Providers.Items.IndexOf((Provider)_Settings["provider"]); 

Cependant IndexOf() retourne toujours -1 Si je inspecter les deux Providers.Items [1] et _Setting ["provider"] à runtim e utilisant la fenêtre immédiate, ils retournent tous les deux

{StoreRetrieveData.Provider} 
Name: "Greenflag" 

Est-ce que je fais quelque chose de mal (bien clairement je suis)?

Répondre

1

Y a-t-il une chance que vous compariez deux objets différents avec la même valeur? Pouvez-vous essayer le code suivant à la place:

Provider provider = (Provider)_Settings["provider"]; 
items.OfType<Provider>().Where(p => p.Name.Equals(provider.Name)); 
+0

Je ne suis pas familier avec la syntaxe LINQ et ne peux pas obtenir ce travail. J'utilise votre code comme "var test = Providers.Items.OfType () .Where (p => p.Name.Equals (provider.Name));" – Fishcake

+0

La réception de cette erreur lors de l'inspection de "System.collections ... .Current" - 'System.Collections.Generic.IEnumerable ' ne contient pas de définition pour 'System' et aucune méthode d'extension 'System' acceptant un le premier argument de type 'System.Collections.Generic.IEnumerable ' peut être trouvé (manque-t-il une directive using ou une référence d'assembly?) – Fishcake

+0

Si vous utilisez .Net 3.5 ou supérieur, assurez-vous d'avoir ' using System.Linq' en haut de votre fichier de code. Si vous ne voulez pas utiliser LINQ, vous devrez utiliser une boucle à la place. – decyclone

1

Utilisation:

ListBox.Items 
    .OfType<ColumnDescriptor>() 
    .FirstOrDefault(c => 
     String.Equals(
      c.Name, 
      ((Provider)_Settings["provider"]).Name, 
      StringComparison.Ordinal));