首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将模型的更改列表同步到ViewModel的ViewModel的最佳实践?

将模型的更改列表同步到ViewModel的ViewModel的最佳实践?
EN

Stack Overflow用户
提问于 2013-02-26 06:58:04
回答 1查看 3.7K关注 0票数 11

我有一个(外部)模型,它公开了一个不断变化的列表(假设每隔两秒左右)。ViewModel知道注册PropertyChange事件的列表。该ViewModel还为UI提供了用于数据绑定的ObservableCollection。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-----------------------------------------------+
|                                           View|
| +-----------+                                 |
| |Listbox    |                                 |
| +-----------+                                 |
+-----/\----------------------------------------+
      ||
      ||DataBinding
      ||
      ||
+-----||----------------------------------------+
|     ||                               ViewModel|
| +--------------------+         +-------------+|
| |ObservableCollection|<--------|ChangeHandler||
| +--------------------+    /    +-------------+|
|                          /           ^        |
+-------------------------/------------|--------+
                         /             |
                        /              |
           Synchronizing Lists         | PropertyChanged
                                       |
                                       |
+--------------------------------------|--------+
|                                  +-----+ Model|
|                                  |IList|      |
|                                  +-----+      |
|                                               |
+-----------------------------------------------+

原则上,这是很好的工作,除了不断更新。每更新一次,用户就会松开他的选择,也就是说,所有的项目都将随每次更新一起被取消选择。这并不奇怪,因为WPF的ListBox“看到”分配了一个新的列表。

因此,问题是我们不分配新的ObservableCollection,而是将当前ObservableCollection的内容与更新的Model.List合并。

现在我的问题

  • 同步列表-在如何进行这样的合并(将新项复制到ObservableCollection、删除缺失项、更新更改的项)方面是否存在最佳实践(或框架)?
  • 选择的项-如何确保ListBox保留当前选定的项(除了该项已被删除的情况)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-26 07:55:37

您可以从更新的模型列表中生成一个新的ObservableCollection,也可以将当前的ObservableCollection与模型的ObservableCollection同步。

如果您进行第二步,您可能希望避免的一件事是为每个同步项触发CollectionChanged事件。看看这个ObservableCollection实现,它具有延迟通知的能力。

至于保持当前的SelectedItem,如果ObservableCollection的实例没有被更改(因为我们同步了集合)并且SelectedItem实例没有被删除,那么列表框应该保存所选内容。但是,如果NotifyCollectionChangedEventArgs.Action是“重置”的,我不确定这是否正确。如果是这样的话,您可以使用我使用的方法,即在SelectedItem中有一个排序规则属性和一个ViewModel属性。在SelectedItem模式下将ViewModel的ListBox.SelectedItem绑定到ListBox.SelectedItem。同步集合时,您可以将SelectedItem保存在一个临时变量中,然后在同步之后重新应用它(如果没有删除它)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15092247

复制
相关文章
不会吧?不会还有人不会测安卓吧
本文属于OneTS安全团队成员Gal0nYu的原创文章,转载请声明出处!本文章仅用于学习交流使用,因利用此文信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,OneTS安全团队及文章作者不为此承担任何责任。
OneTS安全团队
2025/02/07
410
不会吧?不会还有人不会测安卓吧
你不会还不会安装Maven吧
(一般会用阿里云的镜像库,但不知道是我电脑还是网络的原因,下载jar包总会出错,换了很多阿里云镜像都不管用,最后换了腾讯云的就好了,所有这里给出了三个镜像)
爱学习的小超人
2023/03/11
6260
你不会还不会安装Maven吧
【Linux】权限管理——专治不会设置权限而头疼
在Linux系统中,权限是指系统用来限制和控制用户对文件和目录的访问能力的一组规则。这些规则决定了用户可以对文件或目录执行哪些操作,比如读取(read)、写入(write)、执行(execute)等。Linux系统通过权限来维护系统的安全性和数据的完整性。
_小羊_
2024/10/16
1070
【Linux】权限管理——专治不会设置权限而头疼
C# 永远不会返回的方法真的不会返回
一般情况下,如果一个方法声明了返回值,但是实际上在编写代码的时候没有返回,那么这个时候会出现编译错误。
walterlv
2020/02/10
9490
不会吧,不会吧,不会还有人看了这篇文章还不精通JWT吧
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.
上分如喝水
2021/08/16
2.9K0
不会吧,不会吧,不会还有人看了这篇文章还不精通JWT吧
不会吧?你这些Git命令都不会~
1、设置与帮助 1. git help <command> # 显示指定命令的help 2. git config --global user.name "your name" 3. git config --global user.email "your email" 2、修改与提交 1. git status # 查看工作区状态 2. git add <file> # 将指定文件修改提交到本地暂存区 3.
chengcheng222e
2021/11/04
4260
不会git的程序员,会不会被鄙视?
事先声明啊,这与公司技术栈无关,不要说有些公司只用 git 管理。对于公司而言,使用什么版本控制有一定的考虑或者历史原因。但如果你遇到一个不会 git 的新同事,会不会感觉 ta 以前的公司有点low ?
闰土大叔
2018/11/06
1.3K0
不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧
根据业务需求,获取实际业务数据,借助itext库功能,将业务数据填充入提前制作好的PDF模板中
huofo
2022/03/18
1.9K0
不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧
不会死亡的书
旧书重生为精致的艺术品 在这个电子时代,纸质书籍被大多数人遗忘在角落,但是却在艺术家手里进化! Brian Dettmer在这个演讲中列了好多他的作品。 他把旧书重新改造,进行雕刻,裁剪,将书籍内部自有的文字和图片,重新打造成具有立体感的艺术品, 不仅如此,他选择留下来的文字和图片,这种重组展示出了另一种含义,用这些书对更深刻的哲学进行诠释。 在去年的某段时间,这些图片在网络上特别火,原来是出自他之手, 不得不佩服这种创造力,尤其是这种精细的手工,想象力,创造力。 一看到这些作品,第一想到的是《哈
杨熹
2018/04/02
7770
不会死亡的书
不会吧,你还不会用RequestId看日志 ?
在日常的后端开发工作中,最常见的操作之一就是看日志排查问题,对于大项目一般使用类似ELK的技术栈统一搜集日志,小项目就直接把日志打印到日志文件。那不管对于大项目或者小项目,查看日志都需要通过某个关键字进行搜索,从而快速定位到异常日志的位置来进一步排查问题。
IT大咖说
2021/11/26
1.6K0
箭头函数不会修改this
function Person () { this.name = 'little bear', this.age = 18 setTimeout(()=>{ console.log(this ) }) } var a = new Person() setTimeout里的this代表new Person出来的对象 function Person () { this.name = 'little bear', this.age = 18 setTimeout(function(){
windseek
2018/06/14
6640
箭头函数不会修改this
function Person () { this.name = 'little bear', this.age = 18 setTimeout(()=>{ console.log(this ) }) } var a = new Person() setTimeout里的this代表new Person出来的对象 function Person () { this.name = 'little bear', this.age = 18 setTimeout(function(){
windseek
2018/06/21
6390
有一只狗名叫WAF,不会跳也不会叫......
本号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如有侵权请联系小编处理。
网络安全自修室
2022/05/16
9220
有一只狗名叫WAF,不会跳也不会叫......
不会吧不会吧,你不会还不知道这些提高JS代码质量的骚操作吧?
程序的健壮性是指程序在执行时,在局部发生错误的情况下,不影响整个系统的运行,而且我们能够很快的定位到发生错误的位置。我们通常使用以下几种方式来保证程序的健壮性。
AlbertYang
2020/09/08
1.2K0
不会吧不会吧,你不会还不知道这些提高JS代码质量的骚操作吧?
学不会的JVM
首先我们写的源文件叫.java文件,然后点击IDE的运行在硬盘会生成.class字节码文件,接着Java虚拟机从硬盘加载.class字节码文件,再者内部操作和解析成电脑能识别的机器码,最后CPU执行
晚上没宵夜
2020/03/10
3820
SaaS 公共责任:云不会永存,你的数据也不会
当我开启我的技术运营职业生涯(也就是现在的 DevOps),世界发生了翻天覆地的变化。那是在新千年到来之前,当时,世界上最大、最知名的软件即服务公司 Salesforce 还窝在旧金山的一间公寓里。
深度学习与Python
2022/03/23
4440
SaaS 公共责任:云不会永存,你的数据也不会
这年头还不会SpringBoot?
在说SpringBoot之前,我们得聊聊Spring,Spring是J2EE的轻量级代替品。无需开发重量级的JavaBean,Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象实现了JavaBean的功能。
程序员的时光001
2020/07/24
3890
这年头还不会SpringBoot?
测试管理你不会
1、也许你过往看过很多管理文章,也看过一些管理的书籍 。但都没过脑,没有去思考 。
IDO老徐
2022/12/29
2390
啥?不会Debug jdk源码
一个学弟问我,你觉得面试中问什么面试题的频率最高?我毫不犹豫的回答:“源码”,尤其是HasMap,我所经历的面试官几乎必问。朋友听后心一慌,自己还没看过。
大猫的Java笔记
2020/11/25
4730
啥?不会Debug  jdk源码
谁还不会单调栈
单调栈是满足单调性的栈,即在栈的基础上,维持栈内元素的单调性。典型题目如:有找某侧最近一个比其大(小)的值。
marsxingzhi
2023/07/13
2300

相似问题

简单-CCSM不会安装

30

统一不会加载ubuntu 14.04

10

在修改CCSM后恢复统一

10

TuxOnIce不会继续了

10

Xbmcbuntu安装不会继续

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文