2010-10-27 13 views
0

S'il vous plaît je besoin d'aide:silverlight: Aide à la IEnumerable

j'ai une zone de liste binded à la source IEnumerable

personne est une classe qui contient les propriétés suivantes: Nom (chaîne), isChecked (bool)

J'ai besoin de changer la propriété "isChecked" pour une personne spécifique avec le nom "Bob"

Je ne suis pas en mesure de changer la valeur de la propriété!

s'il vous plaît aider

+0

Quel code avez-vous actuellement? – ChrisF

Répondre

1

Si vous essayez d'avoir la valeur affichée à jour lorsque vous mettez à jour votre modèle, vous avez probablement besoin de mettre en œuvre INotifyPropertyChanged sur votre modèle de classe, par exemple

public class Person : INotifyPropertyChanged 
{ 
    public string Name 
    { 
     get 
     { 
      return this.name; 
     } 
     set 
     { 
      this.name = value; 
      this.FirePropertyChanged("Name"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void FirePropertyChanged(string propertyName) 
    { 
     if (this.PropertyChanged != null) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
0

Je suppose que vous avez juste besoin de le changer une fois pour la vue?

Selon la quantité de données dont vous disposez, la façon la plus simple de mettre en œuvre serait d'étendre vos données dans le modèle en ex. List<>, puis effectuez la modification et liez votre contrôle à cette liste.

var people = myDataSource.ToList(); // a LINQ extension - you may need a 'using' 
var bob = people.FirstOrDefault(p => p.Name == "Bob"); 
if (bob != null) 
{ 
    bob.isChecked = true; 
} 

Une variante, et probablement meilleure, serait d'effectuer le changement à la volée en utilisant par ex. a Sélectionner()

var peopleWithBobTicked = myDataSource.Select(
    p => { 
      if (p.Name == "BoB") p.isTicked = true; 
      return p; 
     });