日期:2014-05-17  浏览次数:20912 次

关于ReadOnlyObservableCollection的一点疑惑
ObservableCollection类表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
而添加了ReadOnly则限制该类为只读,不能修改,既然不能修改,就谈不上提供通知,如果只是需要只读功能,那么使用它的基类ReadOnlyCollection即可,这个ReadOnlyObservableCollection完全没有存在的意义啊,微软为何放出这么一个无意义的类出来?

------解决方案--------------------
作用是提供一个基类,类的内部可以捕获包装的集合的更改,对外则保持只读。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace ConsoleApplication1
{
    class A
    {
        public string Name { get; set; }
    }

    class AReadOnlyObservableCollection : ReadOnlyObservableCollection<A>
    {
        public AReadOnlyObservableCollection(ObservableCollection<A> list) : base(list)
        { 
        
        }

        protected override void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs args)
        {
            Console.WriteLine("change: " + args.PropertyName);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ObservableCollection<A> list = new ObservableCollection<A>();
            AReadOnlyObservableCollection rolist = new AReadOnlyObservableCollection(list);
            list.Add(new A() { Name = "aa" }); //list更改通知rolist。
        }
    }
}