2009-11-10 11 views
1

Comment modifier la valeur de TotalPublicationsRead lorsque la propriété Read d'une publication a été modifiée?C# - Comment modifier la valeur d'une propriété en fonction des modifications apportées à une autre propriété (ObservableCollection)?

public class Report 
{ 
    public ObservableCollection<Publication> Publications { get; set; } 
    public int TotalPublicationsRead { get; set; } 
} 

public class Publication : INotifyPropertyChanged 
{ 
    private bool read; 
    public bool Read 
    { 
     get { return this.read; } 
     set 
     { 
     if (this.read!= value) 
     { 
      this.publications = value; 
      OnPropertyChanged("Read"); 
     } 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 

    private void OnPropertyChanged(string property) 
    { 
     if (this.PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    }   
} 

Merci d'avance.

Répondre

4

Si vous essayez de faire ce que je pense que vous êtes, alors je voudrais changer la propriété TotalPublicationsRead et oublier les événements. Dans le code ci-dessous je compte juste les éléments dans la liste où le Publication a été Read.

La façon dont vous essayiez de le faire, vous auriez besoin d'avoir un gestionnaire d'événements pour quand le ObserableCollection a changé. Ensuite, vous devrez attacher un gestionnaire d'événement à l'événement PropertyChanged qui augmenterait ou diminuerait la propriété TotalPublicationsRead. Je suis sûr que ça marcherait, mais ce serait beaucoup plus compliqué.

public class Report 
{ 
    public List<Publication> Publications { get; set; } 
    public int TotalPublicationsRead 
    { 
     get 
     { 
      return this.Publications.Count(p => p.Read); 
     } 
    } 

} 

public class Publication : INotifyPropertyChanged 
{ 
    private bool read; 
    public bool Read 
    { 
     get { return this.read; } 
     set { this.read = value; } 
    } 
}