在WPF中合并两个ObservableCollection集合
作者:天方 时间:2022-11-01 18:42:10
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);
}
}
来源:https://www.cnblogs.com/TianFang/p/3572700.html
标签:WPF,合并,ObservableCollection,集合
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java 数据结构与算法系列精讲之字符串暴力匹配
2021-10-06 05:43:27
![](https://img.aspxhome.com/file/2023/5/65305_0s.jpg)
Java 超详细讲解类的定义方式和对象的实例化
2021-09-11 17:38:29
![](https://img.aspxhome.com/file/2023/9/70939_0s.png)
Springboot-注解-操作日志的实现方式
2023-10-10 13:54:35
flutter封装点击菜单工具栏组件checkBox多选版
2022-08-16 08:18:59
![](https://img.aspxhome.com/file/2023/5/138415_0s.gif)
struts1之简单mvc示例_动力节点Java学院整理
2021-10-28 14:43:03
![](https://img.aspxhome.com/file/2023/5/68545_0s.png)
Druid(新版starter)在SpringBoot下的使用教程
2021-07-03 20:25:18
![](https://img.aspxhome.com/file/2023/1/103841_0s.png)
BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理
2022-01-08 07:02:41
springboot搭建访客管理系统的实现示例
2023-09-02 13:10:41
![](https://img.aspxhome.com/file/2023/3/58463_0s.png)
Java效率提升神器jOOR
2022-06-07 20:46:16
springboot使用Mybatis-plus分页插件的案例详解
2023-10-27 13:47:43
SpringBoot实现本地存储文件上传及提供HTTP访问服务的方法
2022-09-14 19:09:12
![](https://img.aspxhome.com/file/2023/9/63749_0s.png)
Android 将网络的Url资源转换为Drawable资源方式
2023-06-23 03:06:19
java使用htmlparser提取网页纯文本例子
2022-06-14 12:47:05
java使用Cookie判断用户登录情况的方法
2021-11-28 15:12:40
![](https://img.aspxhome.com/file/2023/8/85508_0s.png)
利用Matlab复刻羊了个羊小游戏
2021-10-10 17:13:05
![](https://img.aspxhome.com/file/2023/8/131948_0s.jpg)
OpenTelemetry初识及调用链Trace详解
2021-08-03 12:37:14
![](https://img.aspxhome.com/file/2023/9/85549_0s.png)
简单记事本java源码实例
2023-11-26 02:03:17
![](https://img.aspxhome.com/file/2023/4/59744_0s.jpg)
Java使用条件语句和循环结构确定控制流(实例)
2022-07-04 04:52:35
Android App获取屏幕旋转角度的方法
2021-12-26 10:42:19
![](https://img.aspxhome.com/file/2023/1/91701_0s.gif)
浅谈抛出异常和捕获异常的一些区别
2023-10-19 15:25:24