关于ReadOnlyObservableCollection的一点疑惑

qldsrx 2013-02-11 07:28:49
ObservableCollection类表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。
而添加了ReadOnly则限制该类为只读,不能修改,既然不能修改,就谈不上提供通知,如果只是需要只读功能,那么使用它的基类ReadOnlyCollection即可,这个ReadOnlyObservableCollection完全没有存在的意义啊,微软为何放出这么一个无意义的类出来?
...全文
1266 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-02-12
  • 打赏
  • 举报
回复
引用 2 楼 qldsrx 的回复:
怪我没仔细看那个类的构造函数,居然只能支持ObservableCollection类型的传入,也就是说,这个类是把传入类型的通知pop到了外面,但是把传入类型的更改动作给屏蔽了,只有传入该类型的源头才有权限更改,并且更改的同时能通知UI界面。
FCL4.0以上版本比之前的版本好用很多,一个很重要的原因就是,它不是仅仅提供必要功能的最小集,而是从方便的角度出发提供更多的(但是可能冗余或很简单包装的)内容。比如很多预置的泛型类,更多组合的重载参数等等。
qldsrx 2013-02-12
  • 打赏
  • 举报
回复
怪我没仔细看那个类的构造函数,居然只能支持ObservableCollection类型的传入,也就是说,这个类是把传入类型的通知pop到了外面,但是把传入类型的更改动作给屏蔽了,只有传入该类型的源头才有权限更改,并且更改的同时能通知UI界面。
threenewbee 2013-02-11
  • 打赏
  • 举报
回复
作用是提供一个基类,类的内部可以捕获包装的集合的更改,对外则保持只读。
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。
        }
    }
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧