如何提供实现INotifyCollectionChanged的只读Collection

时间:2010-07-28 19:54:41

标签: c# vb.net

是否有一种有效的方法来提供实现INotifyCollectionChanged的Enumarable<SomeType>或集合,但只能从提供类的内部进行更改。

以下示例显示了我的意思,但缺点是调用者可以强制转换IEnumerable<SomeType>然后操纵我的内部集合,我真的不喜欢这样:

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            
    }

}

是否有一种简单的方法,可能使用ObservableCollection,或者是否需要编写实现IEnumerable<SomeType>INotifyCollectionChanged的包装器,然后将collectionchanged-evnets转发到目标?

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

如果您返回内部集合,那么他们总是会弄乱您的数据。你可以给用户一个ReadOnlyCollection<T>,它是内部数据的克隆。这样,他们就可以获取数据,并且您的数据不会有被破坏的风险。