首页 > 其他 > 详细

在WPF中合并两个ObservableCollection

时间:2014-02-28 19:10:12      阅读:915      评论:0      收藏:0      [点我收藏+]

WPF中的ObservableCollection是一个非常常用的集合对象,我们可以通过将它绑定到ListBox之类的集合控件上时,当集合发生变更时,会同步更新到界面上。但是,有的时候我们需要合并两个集合,将他们的拼接后显示在界面上,此时该何如做呢?

乍一看来,这是个非常简单的事情,.Net的BCL本身就提供了IEnumerate集合连接函数——Concat,可以通过它轻松连接两个集合。但当你使用它连接集合并果呈现到界面上时,就会发现一个问题——虽然它可以将当前结果拼接起来显示,但却不会同步显示集合的变更

原因非常简单:界面之所以能同步ObservableCollection的结果,是因为它实现了INotifyCollectionChanged接口。而用Concat连接后的新集合却是没有实现这个接口的。虽然自己实现一个这样的合并后的可通知集合并不难,但.Net中本身就已经提供了这样一个集合——CompositeCollection,这里就不重复造轮子了。代码示例如下:

    void testCompositeCollection()
    {
        var cmpc = newCompositeCollection();

        var numbers = newObservableCollection<int>();
        var lines = newObservableCollection<string>();


        cmpc.Add(newCollectionContainer() { Collection = numbers });
        cmpc.Add(newCollectionContainer() { Collection = lines });

        listBox.ItemsSource = cmpc;

        foo(numbers);
        foo(lines);
    }

    asyncvoid foo(ObservableCollection<string> lines)
    {
        for (int i = 0; i < 10; i++)
        {
            awaitTask.Delay(800);
            lines.Add("Line " + 2 * i);
        }
    }

    asyncvoid foo(ObservableCollection<int> numbers)
    {
        for (int i = 0; i < 10; i++)
        {
            awaitTask.Delay(1000);
            numbers.Add(i);
        }
    }

在WPF中合并两个ObservableCollection,布布扣,bubuko.com

在WPF中合并两个ObservableCollection

原文:http://www.cnblogs.com/TianFang/p/3572700.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!