这篇文章介绍了在WPF中合并两个ObservableCollection集合的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
WPF中的ObservableCollection是一个非常常用的集合对象,我们可以通过将它绑定到ListBox之类的集合控件上时,当集合发生变更时,会同步更新到界面上。但是,有的时候我们需要合并两个集合,将他们的拼接后显示在界面上,此时该何如做呢?
乍一看来,这是个非常简单的事情,.Net的BCL本身就提供了IEnumerate集合连接函数——Concat,可以通过它轻松连接两个集合。但当你使用它连接集合并果呈现到界面上时,就会发现一个问题——虽然它可以将当前结果拼接起来显示,但却不会同步显示集合的变更。
原因非常简单:界面之所以能同步ObservableCollection的结果,是因为它实现了INotifyCollectionChanged接口。而用Concat连接后的新集合却是没有实现这个接口的。虽然自己实现一个这样的合并后的可通知集合并不难,但.Net中本身就已经提供了这样一个集合——CompositeCollection,这里就不重复造轮子了。代码示例如下:
void testCompositeCollection()
{
var cmpc = new CompositeCollection();
var numbers = new ObservableCollection<int>();
var lines = new ObservableCollection<string>();
cmpc.Add(new CollectionContainer() { Collection = numbers });
cmpc.Add(new CollectionContainer() { Collection = lines });
listBox.ItemsSource = cmpc;
foo(numbers);
foo(lines);
}
async void foo(ObservableCollection<string> lines)
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(800);
lines.Add("Line " + 2 * i);
}
}
async void foo(ObservableCollection<int> numbers)
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(1000);
numbers.Add(i);
}
}
到此这篇关于WPF合并ObservableCollection的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持得得之家。
本文标题为:在WPF中合并两个ObservableCollection集合
基础教程推荐
- C#类和结构详解 2023-05-30
- 一个读写csv文件的C#类 2022-11-06
- C#控制台实现飞行棋小游戏 2023-04-22
- C# 调用WebService的方法 2023-03-09
- winform把Office转成PDF文件 2023-06-14
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# windows语音识别与朗读实例 2023-04-27
- ZooKeeper的安装及部署教程 2023-01-22
- C# List实现行转列的通用方案 2022-11-02
- unity实现动态排行榜 2023-04-27