2011-09-06 2 views
1

En ObservableCollection Comment puis-je vérifier événement CollectionChanged est nul ou non, Cette déclaration jette erreur de syntaxecomment puis-je vérifier l'événement « CollectionChanged » de ObservableCollection est nulle ou non

if (studentList.CollectionChanged == null) 

ErrorMessage:

L'événement 'System.Collections.ObjectModel.ObservableCollection.CollectionChanged' ne peut apparaître sur le côté gauche de + = ou - =

Exemple de code:

public class School 
    { 
     public School() 
     { 
      studentList = new ObservableCollection<Student>();    
      //only when studentList.CollectionChanged is empty i want 
      // to execute the below statement 
      studentList.CollectionChanged += Collection_CollectionChanged; 
     } 
     public ObservableCollection<Student> studentList { get; set; } 
    } 
+2

Je ne suis pas sûr que vous pouvez. Pourquoi est-ce que vous voulez, et pourtant? – wilbur4321

+0

Bonne question, Dans le code ci-dessus, il ne sera exécuté qu'une seule fois. Mais dans mon scénario actuel pendant la sérialisation et la désérialisation, je perds l'événement collectionchanged, donc j'implémente ma propre méthode ondeserialized et attache le programmatique collectionchanged. là j'ai besoin de vérifier. – user841683

Répondre

1

Les événements ne sont pas des instances de délégué.

Essayez ceci:

public class StudentList : ObservableCollection<Student> 
{ 
    public int CountOfHandlers { get; private set; } 

    public override event NotifyCollectionChangedEventHandler CollectionChanged 
    { 
     add {if (value != null) CountOfHandlers += value.GetInvocationList().Length;} 
     remove { if (value != null)CountOfHandlers -= value.GetInvocationList().Length; } 
    } 
} 

public class School 
{ 
    public School() 
    { 
     studentList = new StudentList(); 
     //only when studentList.CollectionChanged is empty i want 
     // to execute the below statement 
     if (studentList.CountOfHandlers == 0) 
     { 
      studentList.CollectionChanged += studentList_CollectionChanged; 
     } 
    } 

    public StudentList studentList { get; set; } 

    private void studentList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e){} 
} 

public class Student { } 
+0

Merci, je l'ai traité de la même manière que vous avez dit avec une légère différence événement privé NotifyCollectionChangedEventHandler _collectionChanged; événement public override NotifyCollectionChangedEventHandler CollectionChanged {{ajouter if (_collectionChanged == NULL) { _collectionChanged + = valeur; } } supprimer { _collectionChanged - = valeur; } } – user841683

4

Vous ne pouvez pas voir si un événement a des gestionnaires attachés depuis l'extérieur de la classe qui possède l'événement. Vous devrez trouver une solution différente au problème que vous essayez de résoudre.

Questions connexes