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。
}
}
}