網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
WPF中的ObservableCollection是一個(gè)非常常用的集合對(duì)象,我們可以通過(guò)將它綁定到ListBox之類(lèi)的集合控件上時(shí),當(dāng)集合發(fā)生變更時(shí),會(huì)同步更新到界面上。但是,有的時(shí)候我們需要合并兩個(gè)集合,將他們的拼接后顯示在界面上,此時(shí)該何如做呢?
乍一看來(lái),這是個(gè)非常簡(jiǎn)單的事情,.Net的BCL本身就提供了IEnumerate集合連接函數(shù)——Concat,可以通過(guò)它輕松連接兩個(gè)集合。但當(dāng)你使用它連接集合并果呈現(xiàn)到界面上時(shí),就會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題——雖然它可以將當(dāng)前結(jié)果拼接起來(lái)顯示,但卻不會(huì)同步顯示集合的變更。
原因非常簡(jiǎn)單:界面之所以能同步ObservableCollection的結(jié)果,是因?yàn)樗鼘?shí)現(xiàn)了INotifyCollectionChanged接口。而用Concat連接后的新集合卻是沒(méi)有實(shí)現(xiàn)這個(gè)接口的。雖然自己實(shí)現(xiàn)一個(gè)這樣的合并后的可通知集合并不難,但.Net中本身就已經(jīng)提供了這樣一個(gè)集合——CompositeCollection,這里就不重復(fù)造輪子了。代碼示例如下:
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
相關(guān)推薦
- 2023-11-25 全局后置路由守衛(wèi)(afterEach)
- 2022-02-12 android button的圓角邊框及點(diǎn)擊效果實(shí)現(xiàn)
- 2022-10-12 C#設(shè)計(jì)模式之建造者模式生成器模式示例詳解_C#教程
- 2022-04-20 C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法時(shí)間空間復(fù)雜度基礎(chǔ)實(shí)踐_C 語(yǔ)言
- 2024-02-26 IDEA設(shè)置字體大小
- 2022-09-25 FFmpeg源碼分析:SwsContext圖像轉(zhuǎn)換上下文
- 2023-02-03 TypeScript?中?as?const使用介紹_其它
- 2022-04-05 macOS下安裝JDK11和配置環(huán)境變量
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支