MVVM - 用户控件相互交谈的理想方式是什么

MVVM - what is the ideal way for usercontrols to talk to each other(MVVM - 用户控件相互交谈的理想方式是什么)
本文介绍了MVVM - 用户控件相互交谈的理想方式是什么的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含其他几个用户控件的用户控件.我正在使用 MVVM.每个用户控件都有一个对应的 VM.这些用户控件如何相互发送信息?我想避免在后面的 xaml 代码中编写任何代码.特别是我对控件(在主用户控件内部)如何相互通信以及它们如何与容器用户控件通信感兴趣.

I have a a user control which contains several other user controls. I am using MVVM. Each user control has a corresponding VM. How do these user controls send information to each other? I want to avoid writing any code in the xaml code behind. Particularly I am interested in how the controls (inside the main user control) will talk to each other and how will they talk to the container user control.

编辑:我知道使用 events-delegates 将帮助我解决这个问题.但是,我想避免在 xaml 代码隐藏中编写任何代码.

EDIT: I know that using events-delegates will help me solve this issue. But, I want to avoid writing any code in xaml code-behind.

推荐答案

通常情况下,最好尽量减少部件之间的通信量,因为每次两个用户控件相互交谈"时,你就引入了一个它们之间的依赖关系.

Typically, it's best to try to reduce the amount of communication between parts, as each time two user controls "talk" to each other, you're introducing a dependency between them.

话虽如此,有几点需要考虑:

That being said, there are a couple of things to consider:

  • 用户控件始终可以通过公开属性和使用 DataBinding 与其包含的控件对话".这非常好,因为它在各个方面都保留了 MVVM 风格.
  • 包含的控件可以使用属性将两个用户控件上的两个属性链接"在一起,再次保持清晰的边界

如果您确实需要更明确的沟通,有两种主要方法.

If you do need to have more explicit communication, there are two main approachs.

  1. 实现两个元素共有的服务,并使用依赖注入在运行时提供实现.这让控件可以与服务通信,而服务又可以使控件保持同步,但也可以将依赖关系降至最低.
  2. 使用某种形式的消息传递控件之间的消息.许多 MVVM 框架采用这种方法,因为它将发送消息与接收消息分离,再次将依赖关系保持在最低限度.

这篇关于MVVM - 用户控件相互交谈的理想方式是什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)