首页 后端开发 C++ 如何在 WPF 应用程序中从子视图模型调用主视图模型函数?

如何在 WPF 应用程序中从子视图模型调用主视图模型函数?

Dec 29, 2024 pm 06:26 PM

How Can I Invoke Main View Model Functions from Child View Models in a WPF Application?

从其他视图模型调用主视图模型函数

问题:

在应用程序中通过树视图和多个内容呈现器,您寻求调用主窗口视图模型中的函数(MainWindowViewModel) 来自树视图视图模型(TreeViewViewModel)。这对于手动更新显示是必要的,因为 MainWindowViewModel 控制这些更改。

解决方案:

使用委托对象是这种父子通信的可行解决方案。委托方法可以在不同的上下文中使用,包括子父视图模型、代码隐藏关系和纯数据交互。有关委托的更多信息,请参阅 Microsoft 的委托(C# 编程指南)文档。

委托实现:

在 TreeViewViewModel 中,您可以实现委托来提供返回父视图模型的路径。定义一个委托方法,以便在子视图模型准备就绪时调用:

public delegate void ReadyForUpdate();
public ReadyForUpdate OnReadyForUpdate { get; set; }

主视图模型 (MainWindowViewModel) 将在附加处理程序后订阅 UpdateDisplay 方法:

public void TreeViewViewModel_OnreadyForUpdate()
{
    UpdateDisplay();
}

数据绑定方法:

或者,考虑一种更简单的方法,涉及直接从子视图到父视图模型的数据绑定。例如,绑定按钮命令属性:

<!-- In TreeViewView -->
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand,
RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />

这假设 MainWindow 的 DataContext 设置为父视图模型的实例。

以上是如何在 WPF 应用程序中从子视图模型调用主视图模型函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驱动投资研究,做出更明智的决策

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何与C中的Coroutines合作 如何与C中的Coroutines合作 Aug 27, 2025 am 04:48 AM

c 20 coroutinesarefunctionsthatcansuspendandresumeexecutionusco_await,co_yield,orco_return,enaplingasynchron千千禧一代; selequiredequirenderndingthepromisetepts,coroutineHandleandle,and coroutineHandhandle,and awawaitableablects,andawawaitableablects,andawawaitableablects and particalsincralticalsincludingGenerSrudinggenerSrasksandtask

如何在C中编写异常安全代码? 如何在C中编写异常安全代码? Aug 29, 2025 am 08:17 AM

UseRAIItotieresourcemanagementtoobjectlifetimes,ensuringcleanupviadestructorsduringstackunwinding.2.Aimforstrongorno-throwexceptionsafetyguarantees,avoidingthebasicornoguaranteewhenpossible.3.Applythecopy-and-swapidiomtoachievethestrongguaranteebyper

如何将字符串转换为大写或小写 如何将字符串转换为大写或小写 Sep 01, 2025 am 06:36 AM

要将字符串转换为大写或小写,应使用std::transform结合::toupper或::tolower函数。1.包含头文件和;2.调用std::transform,传入字符串的起始和结束迭代器,并指定输出迭代器为str.begin()以原地修改;3.使用::toupper将每个字符转为大写,或使用::tolower转为小写。该方法适用于ASCII字符串且代码简洁高效。对于非ASCII或Unicode文本,应使用ICU等库以确保正确处理。手动循环方式虽可读性高但效率较低。因此,推荐使用std::

C内联名称空间示例 C内联名称空间示例 Sep 01, 2025 am 02:01 AM

inlinenamespace主要用于版本控制和符号透明暴露,其成员可被外层命名空间直接访问。①inlinenamespace中的名称被视为外层命名空间的直系成员,无需指定内层命名空间即可使用;②常用于库的版本管理,如将v1设为inline,升级时改为v2,旧版本仍可通过显式命名空间访问;③支持ABI兼容性设计,新版本类型默认暴露,旧二进制接口保留在非inline命名空间中;④可嵌套和多个存在,但通常只有一个作为默认展开;⑤注意一个外层命名空间只能有一个默认inline子命名空间,且应避免用户依

c调用c函数来自c示例 c调用c函数来自c示例 Aug 25, 2025 am 10:01 AM

在C 中调用C函数需使用extern"C"防止名称修饰,具体步骤为:1.编写C函数头文件hello.h并用#ifdef__cplusplus包裹extern"C"以确保兼容性;2.实现C函数say_hello()并在C 主程序main.cpp中包含该头文件;3.使用g 编译C 文件并链接C目标文件或直接一步编译链接;4.运行程序可正确输出结果,表明C函数被成功调用,整个过程需确保声明和编译方式正确,最终程序能正常运行并输出“CallingCfunc

如何使用std ::功能和std :: bint in in c bind 如何使用std ::功能和std :: bint in in c bind Sep 01, 2025 am 07:26 AM

std::function和std::bind是C 中用于处理可调用对象的工具,std::function能包装任何具有兼容签名的可调用对象,适用于回调、事件系统等场景,支持函数、lambda、仿函数和成员函数;std::bind可固定函数的部分参数生成新可调用对象,常用于参数绑定和重排,但自C 11起lambda更受推荐因其更清晰高效;使用时需包含头文件,注意std::function存在类型擦除开销,std::bind对移动独占类型可能引发意外复制,因此建议优先使用lambda,仅在复杂

如何使用C STL的算法 如何使用C STL的算法 Sep 01, 2025 am 06:58 AM

使用C STL算法可使代码更简洁、安全且高效,答案是通过包含和头文件并利用迭代器操作容器,可有效使用如std::find、std::sort、std::transform、std::accumulate等算法,结合lambda表达式和erase-remove等惯用法,提升代码质量并减少错误,最终实现现代化C 编程。

C挥发性关键字示例 C挥发性关键字示例 Sep 05, 2025 am 06:54 AM

volatile用于告诉编译器变量的值可能在任何时候被外部因素改变,因此必须每次从内存中重新读取。1.在嵌入式系统中,硬件寄存器的值可能由硬件异步修改,使用volatile可防止编译器将读取优化为一次并无限循环。2.在信号处理程序中,全局变量被信号处理器修改时,必须声明为volatile,否则编译器可能将其缓存到寄存器中导致主循环无法感知变化。3.volatile不提供线程安全,多线程场景应使用std::atomic或互斥锁。4.常见用途包括内存映射硬件、信号处理和异步回调中的共享变量。5.使用

See all articles