2010-07-28 5 views
2

Existe-t-il un moyen efficace de fournir un Enumarable<SomeType> ou une collection qui implémente INotifyCollectionChanged mais qui ne peut être modifiée qu'à l'intérieur de la classe fournissant.Comment fournir une collection readonly qui implémente INotifyCollectionChanged

L'exemple suivant montre ce que je veux dire, mais présente l'inconvénient que l'appelant peut lancer la IEnumerable<SomeType> arrière puis manipuler ma collection interne, ce que je voudrais vraiment n'aime pas:

public class DemoClass{ 

    ObservableCollection<SomeType> m_collection= 
            new ObservableCollection<SomeType>(); 

    public IEnumerable<SomeType> SomeTypeInstances{ 
     get{return m_collection;} 
    } 

    private void AMethod(){ 
     // Here I can work with m_collection    
    } 

} 

est-il un moyen facile, peut-être avec ObservableCollection, ou est-il nécessaire d'écrire un wrapper qui implémente IEnumerable<SomeType> et INotifyCollectionChanged, puis de transférer les evnets de collectionchanged à la destination?

Répondre

1

Si vous renvoyez la collection interne, ils peuvent toujours manipuler vos données. vous pouvez simplement donner à l'utilisateur un ReadOnlyCollection<T> qui est un clone des données internes. De cette façon, ils peuvent accéder aux données et vos données ne risquent pas d'être corrompues.

Questions connexes