2011-01-14 3 views
0

J'apprends des collections observables, j'ai donc écrit un petit programme pour tester mes progrès. J'ai une classe de collection observable que je fournis des valeurs initiales à partir d'une liste et lier la collection observablec à un Datagrid. Cela fonctionne très bien, mais quand j'efface la liste en utilisant myListOfPlayers.myList.Clear(), le Datagrid ne s'efface pas. Je pensais que la propriété INotifyPropertyChanged gérerait cela. Qu'est-ce que je fais mal?Collection de collection observable a changé la question

public class PlayerList : ObservableCollection<PlayerName> //observable collection class 
    { 
     public PlayerList() 
      : base() 
     { 
      Clear(); 

      foreach (var p in myListOfPlayers.myList.OrderBy(x => x.Score)) 
      { 
       Add(p); 
      } 
     } 

     public PlayerList(List<PlayerName> list) 
      : base(list) 
     { 
      Clear(); 

      foreach (var p in list) 
      { 
       Add(p); 
      } 
     } 
    } 

je mets en œuvre INotifyPropertyChanged dans la classe PlayerName:

public class PlayerName : INotifyPropertyChanged 
    { 
     private string _name; 

     public string Name 
     { 
      get { return _name; } 
      set 
      { 
       _name = value; 
       OnPropertyChanged("Name"); 
      } 
     } 

     private int _score; 

     public int Score 
     { 
      get { return _score; } 
      set 
      { 
       _score = value; 
       OnPropertyChanged("Score"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void OnPropertyChanged(string propertyName) 
     { 
      var handler = PropertyChanged; 

      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
    } 

Répondre

0

Si vous désactivez myListOfPlayers.myList, le PlayerList n'est pas censé être éclairci ... Il n'y a pas de relation entre ces 2 listes: vous venez d'utiliser myListOfPlayers.myList pour initialiser le contenu de PlayerList, mais ils sont deux listes différentes. Qu'est-ce que vous faites sur l'un d'entre eux n'affecte pas l'autre

+0

Cela a du sens, mais alors comment puis-je effacer la collection observable? –

+0

En appelant Clear sur ObservableCollection, pas sur la collection "source" ... –

Questions connexes