news 2026/3/23 2:59:20

WPF MVVM模式下绑定两个ViewModel导致View不触发更新

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WPF MVVM模式下绑定两个ViewModel导致View不触发更新

正常是一个View对应一个ViewModel

然后View的DataContext是ViewModel。

View中的命令和显示数据都绑定在ViewModel中。

我在工作中遇到了一个错误,在一个ViewModel中改变属性的值,不会反馈到界面上。

调试得知,这个ViewModel中经过了两次构造,也就是生成了两个对象。

假设这两个ViewModel分别是VMA和VMB;

其中我的View的命令绑定在了VMA中的方法,View的显示数据数据绑定在了VMB中。

所以当我触发命令时,实际上是吧VMA中的数据更新了,VMB中并没有更新,导致界面数据不发生改变;

导致这种问题的原因是因为我在xaml文件中和xaml.cs都编写了绑定代码,但是我在xaml.cs文件中又重新获取了一个ViewModel对象。

xaml中:

界面后台绑定的对象是反序列化得到的。

xaml.cs中:

ViewModel是我重新在ioc容器中获取的。问题就出现在这里,反序列化得到一个,ioc容器中得到一个,导致混乱。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/21 13:40:13

用Python批量处理Excel和CSV文件

SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。目录安装SQLAlchemy核心概念连接数据库定义数据模型创建数据库表基本CRUD操作查询数据关系操…

作者头像 李华
网站建设 2026/3/21 10:18:53

C++代码依赖分析

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第…

作者头像 李华
网站建设 2026/3/21 11:13:50

行为型模式:状态模式——嵌入式状态管理的优雅解决方案

嵌入式C开发中,不少人会用“全局状态变量冗长switch-case”管理设备状态,所有逻辑堆砌一处。后续新增低功耗、固件升级等状态时,需修改核心代码,牵一发而动全身;且状态切换依赖全局变量,调试追踪困难&#…

作者头像 李华
网站建设 2026/3/15 17:42:08

【委托监控】【成交监控】

【委托监控】【成交监控】这是一个炒股软件里的短线精灵设置界面,它的作用是帮你实时监控盘口的异常交易行为,让你能快速捕捉主力资金的动向。我给你分模块解释一下:🔹 顶部:短线精灵置顶这个开关打开后,“…

作者头像 李华
网站建设 2026/3/15 16:33:57

C++中的桥接模式

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第一个满…

作者头像 李华
网站建设 2026/3/22 14:48:26

用户认证与授权:使用JWT保护你的API

SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。目录安装SQLAlchemy核心概念连接数据库定义数据模型创建数据库表基本CRUD操作查询数据关系操…

作者头像 李华