WPF,MVVM多层嵌套VM的传值

news/2024/12/19 15:27:41/文章来源:https://www.cnblogs.com/lordxinwei/p/18617338

目前我的一个窗体结构如下:

A窗体(Window)包括B用户控件(UserControl)

目前A的VM——ViewModelA 已经能和A窗体的DataContext数据上下文相绑定。

B用户控件里有dataTemplate绑定到数据中。

那么如何给B控件赋值呢?

两种方式:

①方式一

:绑定到 A Window 的 ViewModel 的一部分。

即:直接在AViewModel类中添加上所有B用户控件需要的依赖属性

比较简单

<Window x:Class="YourNamespace.A"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:YourNamespace"Title="A Window"><Grid><local:B DataContext="{Binding .}" /></Grid>
</Window>
//实现方式一

注意:<local:B DataContext="{Binding .}" /> 和 <local:B DataContext="{Binding }" /> 和 <local:B DataContext="{Binding .}" /> 和 <local:B DataContext="{Binding .}" />

两种方式一样,都是绑定到自身的DataContext。这种方式说明B UserControl 和 A Window 公用一个数据上下文DataContext

 

②方式二

添加一个BViewModel(即用户控件B自身的数据上下文)

可以通过依赖注入等方式

public class AViewModel
{public BViewModel BViewModel { get; set; }public AViewModel(){BViewModel = new BViewModel();}
}<Window x:Class="YourNamespace.A"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:YourNamespace"Title="A Window"><Grid><local:B DataContext="{Binding BViewModel}" /></Grid>
</Window>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855417.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5款Win电脑好用的备忘录app推荐盘点

对于大多数的打工人来说,在使用Win电脑办公时,是需要随手记录一些琐事的,特别是工作上的事情,如果不随手记下来,很有可能会忘记。今天给大家介绍5款亲测好用的备忘录app,可以在电脑上使用,也可以实时同步到手机端,非常方便。 1、钉钉便签 作为一款办公软件,它不仅可以…

珠海盈致:智能制造赋能企业,解锁全新价值维度

智能制造是信息技术与制造技术的深度融合,经历了从数字化制造到“互联网+制造”,再到新一代智能制造的三个阶段。它是一个大系统,贯穿于产品、制造、服务的全生命周期,由智能产品、智能生产、智能服务三大功能系统,以及工业智联网和智能制造云两大支撑系统组成。 智能制造…

【路由交换】华为ENSP配置网口桥接

ENSP桥接物理网口,需要创建Cloud云对象,并在云对象中完成接口绑定配置绑定物理网口绑定UDP端口配置端口映射模拟器和cloud对象连接网络连接测试

基于QT+MQTT的实时视频监控

MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅模式的轻量级通信协议,广泛应用于物联网领域。它允许设备通过极少的代码和有限的带宽实现实时可靠的消息服务。MQTT协议的核心在于其三部分组成的控制报文:固定报头、可变报头和有效载荷。mqtt中的一些名词解…

在 K8S 中创建 Pod 是如何使用到 GPU 的:nvidia device plugin 源码分析

本文主要分析了在 K8s 中创建一个 Pod 并申请 GPU 资源,最终该 Pod 时怎么能够使用 GPU 的,具体的实现原理,以及 device plugin、nvidia-container-toolkit 相关源码分析。1.概述 在 两篇文章中分别分享了在不同环境如何使用 GPU,以及在 k8s 中使用 GPU Operator 来加速部…

unity 协程

协程 异步执行 必须带关键字 yield return 0 ;程序暂时挂起

修改网站统计图标的位置,网站统计图标位置调整指南

修改网站统计图标的位置通常涉及编辑网站的HTML和CSS文件。以下是详细的步骤:确定修改需求:明确需要将统计图标移动到的具体位置。备份网站文件:在进行任何修改之前,建议先备份网站的所有文件。连接到FTP服务器:使用FTP客户端(如FileZilla、WinSCP等)连接到你的服务器。…

C语言浮点数相等判定

等价关系 按照离散数学的等价关系叙述,集合 \(X\) 上的关系 \(R \subset (X, X)\) 如果满足反身性: \((x, x) \in R, \forall x \in X\),自己等于自己 对称性: 如果 \((x, y) \in R\),则 \((y, x) \in R\),我等于你,则你也等于我 传递性: 如果 \((x, y) \in R\) 且 \((y, …

怎么修改网站admin密码,如何安全地修改网站后台管理系统的admin密码,提升安全性,防止未授权访问

修改网站后台管理系统的admin密码是确保网站安全的重要措施。以下是详细的修改步骤:登录后台管理系统:使用当前的admin账户登录网站后台管理系统。 确保使用的是最新的浏览器,以获得最佳的用户体验。进入用户管理页面:在后台管理系统中,找到“用户管理”或“管理员管理”选…

PbootCMS 织梦支付宝接口常见错误

错误代码 ILLEGAL_PARTNER:更新 PARTNER 值和安全校检码。 确认 PARTNER 值和安全校检码对应且有效。 确认 PARTNER 开通了所需的服务。错误代码 HAS_NO_PRIVILEGE:登录签约的支付宝账号,查询接口服务类型和合同生效时间。 确认服务名称、合同生效时间、合作者身份ID和校验码…

帝国CMS调用标题分类灵动标签

[e:loop={1,5,0,0}] 【<a href="<?=sys_ReturnBqInfoTypeUrl($bqr[ttid])?>"><?=class_tr[$bqr[ttid]][tname]?></a>】 <a href="<?=$bqsr[titleurl]?>" target="_blank"><?=$bqr[title]?>&l…

旅游开发团队协作,什么办公软件能增进默契?

冬季旅游市场具有独特的魅力与挑战,对于旅游公司而言,选择合适的团队协作办公软件至关重要。这些软件不仅要满足日常业务需求,更要契合冬季旅游的特殊情境,如应对旅游高峰期的高效协作、保障寒冷天气下旅游行程的顺利进行等。对于 MBTI 中的 J 人来说,有序、高效且可视化的…