如何在 MVVM WPF 应用程序中向父视图通知子视图事件?

2023-12-10

我有一个基于 MVVM 的 WPF 桌面应用程序。 我正在利用 MVVMLight 和 Prism 创建包含视图和子视图的用户控件。

我在子视图上有按钮。 (假设这是一个关闭按钮)

将单击事件的通知从嵌套子视图传播到其包含的父视图的最佳方法是什么?


子视图可以使用EventAggregator在棱镜或MessengerMvvmLight 中的类发送父视图(或视图模型)订阅的消息。有关该概念的更多信息,请参阅以下链接。

https://msdn.microsoft.com/en-us/magazine/jj694937.aspx http://dotnetpattern.com/mvvm-light-messenger https://blog.magnusmontin.net/2014/02/28/using-the-event-aggregator-pattern-to-communicate- Between-view-models/

另一种方法是从父视图模型中保留对子视图模型的强引用,并在父视图模型中引发子视图模型订阅的事件。

使用事件聚合器或消息传递器的好处是,您可以避免在事件发布者和订阅者之间引入紧密耦合,这将使应用程序更易于维护。

事件或消息的发布者和订阅者都只知道事件聚合器或信使,但他们对彼此一无所知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 MVVM WPF 应用程序中向父视图通知子视图事件? 的相关文章

  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • Visual Studio 2022 - 编译旧应用程序时出错

    我们正在尝试在 Visual Studio 2022 中使用 VB6 32 位应用程序 编译 2002 年以来非常旧的应用程序 我们需要调试此应用程序并能够在 Windows 10 计算机上运行此应用程序 编译时 我们发现以下错误 这似乎是
  • Spring.NET 和构造函数拦截器

    我正在尝试在构造时对对象进行一些 AOP 并找到了 IConstructorInterceptor 这对于我想要的东西来说是完美的 但它似乎不起作用 http jira springframework org browse SPRNET 2
  • C# .Net Serial DataReceived 事件响应对于高速数据来说太慢

    我已经设置了一个 SerialDataReceivedEventHandler 并在 VS2008 Express 中使用基于表单的程序 我的串口设置如下 115200 8N1 Dtr 和 Rts 已启用 接收字节阈值 1 我有一个通过蓝牙
  • 正则表达式不等于字符串

    我用正则表达式用头撞墙 我正在尝试定义一个表达式 该表达式完全排除此文本 System 不区分大小写 但可以包含 系统 这个词提供的不仅仅是这个 例子 系统 无效 系统 无效 系统 无效 系统 无效 asd 系统 有效 asd 系统 asd
  • 分层架构中的异常处理

    我们正在分层设计中重构 当然还有重新设计 我们的服务 我们有服务操作层 BLL 网络抽象层 gt 处理网络代理 数据抽象层 但我们对我们的异常处理策略有点困惑 我们不想向外界透露太多 BLL 的信息 从其他层到bll就可以了 我们不想让 t
  • Dotnet“新”命令不适用于 Framework 4.5?

    我正在尝试使用 dotnet 创建 4 5 框架类库项目new命令如下 dotnet new classlib lang C f net45 o TestProject 错误 无效参数 f 网络45 net45 不是 f 框架 的有效值 如
  • 实用程序库中应包含哪些内容[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着我的项目越来越多 我发现我经常从一个项目到另一个项目 从一个客户到另一个客户重复许多常见的任务 因此 我开始组装一个 实用程序 库 这是这些
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • 找不到 Microsoft.Office.Interop Visual Studio

    我正在开发一个使用 C 发送电子邮件的应用程序 该应用程序将能够使用邮件模板等 问题是我无法找到任何 Office Interop 引用 这意味着我无法使用 Outlook 我的计算机上安装了 Office 但我也尝试从此链接安装 PIAh
  • 在 .Net 托管的 IronPython 脚本中设置和获取变量

    我正在尝试使用 Net 控制台应用程序中托管的 IronPython 来构建验证规则引擎的原型 我已经将脚本精简到我认为的基础内容 var engine Python CreateEngine engine Execute from Sys
  • 在 C# 中使用通配符解析相对路径

    在 C 中 如果我有一个目录路径和一个带通配符的相对文件路径 例如 c foo bar and blah cpp 有没有一种简单的方法来获取绝对文件路径列表 例如 c foo blah a cpp c foo blah b cpp 背景 有
  • CompileAssemblyFromDom 抛出访问被拒绝异常

    代码 using var codeProvider new CSharpCodeProvider var compilerParameter new CompilerParameters assemblies assemblyName fa
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e
  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • ItemSource 中具有不同类型数据的 ListView 多行列标题

    继续this https stackoverflow com q 26712051 1997232问题 我想实现这种ListView 它应该有两件事 多行列标题 不同的数据类型通过绑定ItemsSource以不同方式显示 为了解决 1 我尝
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups

随机推荐

  • 如何从多路径 Dijkstra 重建路径?

    我目前正在编写一个用于图形的 PHP 库 我已经成功实现了单路径 Dijkstra 算法 但现在在路径重建阶段很难实现多路径版本 取下图 为了简单起见 该图只有从顶点 A 到 J 的路径 经过多个其他顶点 这些顶点的成本都是相等的 即每条路
  • 隐藏列表视图中的项目

    我试图隐藏自定义列表适配器中的项目 我可以隐藏文本的可见性 但无法隐藏整个列表项 它仍然显示分隔线等 我尝试过 tv setVisibility View INVISIBLE tv setVisibility View GONE conve
  • Elasticsearch 批量 API post 请求中出现 NewLine 错误

    我正在尝试使用elasticsearch批量API将多条记录插入到索引中 我的 JSON 看起来像这样 请求 json 我正在插入一个新行 n 在文档末尾 但我仍然得到newline error Error error root cause
  • Oracle to_date 与 p.m./a.m

    我需要在oracle中将字符串转换为日期 字符串的格式是这样的 08 11 1999 05 45 00 p m 但最后的位置可能会在下午或上午发生变化 我尝试做一些类似的事情 to date 08 11 1999 05 45 00 p m
  • AssertionError:标签类 15 超出 data/coco128.yaml 中的 nc=1。可能的类标签是 0-0

    最近几天我一直在构建 yolov5 环境并尝试运行它 我使用以下代码来测试我的设置是否成功 python train py img 640 data data coco128 yaml cfg models yolov5s yaml wei
  • 范围以及如何使用 VB.Net 缩小范围

    如果我想缩小 C 中变量的范围 我可以引入额外的大括号 即 class Program static void Main string args myClass x new myClass x MyProperty 1000 Console
  • 使用 Fragment 按钮打开另一个 Activity

    好吧 我尝试了两种类型的代码来让它工作 当我按下按钮进入另一个活动时 它不断地给我强制关闭 我正在使用一个片段 该片段代码中有一个按钮 但我似乎无法让它工作 我不是一名经验丰富的 Android 开发人员 但我正在尽力学习 这是 Java
  • NaN 作为特殊参数

    我正在写一个小库 你可以在其中设置范围 起点和终点是双精度的 该库具有该范围的一些内置或计算的默认值 但是一旦通过范围设置函数设置了它们 就无法返回到默认值 因此我喜欢做的就是使用NaN值作为使用默认值的指示符 但是我没有找到NaN的任何标
  • OData AspNetCore 对使用 $query 的长 URL 的支持不起作用

    正如所指出的this文章 与 query关键字可以解决7 5版本之后OData URL过长的问题Microsoft AspNetCore OData 但在我的项目中 我正在使用版本 8 preview3 我尝试使用这个但我不断得到404 未
  • OpenCV中无法使用SURF、SIFT

    我正在尝试一个简单的事情 比如 detector cv2 SIFT 并得到这个严重的错误 detector cv2 SIFT AttributeError module object has no attribute SIFT 我不明白 因
  • 根据多个条件按列名称过滤数据框

    我有一个包含许多列的 pandas 数据框 我想根据列名称但使用两个不同的标准来过滤数据框 我尝试使用 df filter 指定项目和正则表达式 但这是不允许的 如果列名称为 用户名 XYZ 1001 XYZ 1002 XYY 1001 X
  • GLIBC 安装失败,程序丢失或太旧

    我曾尝试使用非 root 来安装 glibc 2 15 经过谷歌搜索并尝试两天后 我在这里寻求帮助 After configure it output following error glibc 2 15 configure prefix
  • 反转范围会导致类型不匹配

    例如 我想使用一个变量来保存通常是某个范围的内容Range
  • JavaScript 中的查询字符串

    通过使用document referrer我们会得到JavaScript中所有URL的引用 例如 http localhost testwordpress wp admin admin php page thesis options upg
  • 如何在node中使用axios发布表单数据

    EDIT更改标题以便对其他人有帮助 我正在尝试将图像上传到imgbb使用 Axios 使用他们的 api 但不断收到错误响应Empty upload source imgbb 的 API 文档显示了以下示例 curl location re
  • 组合 datetime.date 和 datetime.time 对象的 Pythonic 方式

    我有两个代表同一事件实例的对象 一个保存日期 另一个保存该事件的时间 我想创建一个日期时间对象 由于不能简单地添加日期和时间对象 以下调用失败 datetime date 2011 01 01 datetime time 10 23 它位于
  • 如何在 python/matplotlib 中设置默认刻度参数?

    我希望我的所有绘图都具有指向内部的刻度 而不是 matplotlib 默认的外部 所以我正在寻找一种使用 plt rcparams 设置它的方法 对于每个情节 目前我正在做 ax tick params direction out 但这仅适
  • Ionic:任务“:mergeDebugResources”执行失败(某些文件处理失败)

    离子构建命令工作正常 直到我决定添加一些自定义启动屏幕并运行以下命令 离子资源 每次我运行构建命令时 我都会在运行构建命令时遇到以下错误 mergeDebugResourcesAAPT err Facade for 35126910 lib
  • SASS - 增加一个类并选择列表中的下一个变量

    我正在尝试进行一个设置 将类从 1 增加到 12 并根据变量列表 也是 12 个变量 设置背景颜色 我很接近 但没有得到我所希望的 这是我第一次涉足 SASS 中的控制指令 所以请原谅我的无知 目前 我正在成功增加班级 这是我错过的选择增量
  • 如何在 MVVM WPF 应用程序中向父视图通知子视图事件?

    我有一个基于 MVVM 的 WPF 桌面应用程序 我正在利用 MVVMLight 和 Prism 创建包含视图和子视图的用户控件 我在子视图上有按钮 假设这是一个关闭按钮 将单击事件的通知从嵌套子视图传播到其包含的父视图的最佳方法是什么 子