【问题标题】:Pattern / methodology for communication between Windows and/or UserControlsWindows 和/或 UserControls 之间通信的模式/方法
【发布时间】:2010-07-14 17:54:35
【问题描述】:

我目前正在开发一个应用程序,我将使用 C# 和 WPF 打开多个窗口。

是否有用于帮助促进打开的 Windows 或/和用户控件之间的通信的模式或通用方法?

例如,一个窗口,我们称之为“层次窗口”,可以显示世界上国家、省和城市的层次结构。除此之外,还有其他几个可能显示省或市的窗口,例如 OR 允许您创建省或市。在创建一个新城市的情况下,我的“城市窗口”与我的“层次窗口”就添加城市或删除城市进行沟通的最佳方式是什么?

请记住,在创建城市时,“层次结构窗口”甚至可能不会打开。此时,不需要响应/操作。

【问题讨论】:

    标签: c# wpf windows user-controls


    【解决方案1】:

    有两种常见的方法:

    1. 使用依赖注入注入公共服务。
    2. 使用某种形式的信使。

    第二个选项在 WPF 和 Silverlight 中变得非常流行。很多常用的工具包,比如MVVM Light(详见Messenger class description)都采用这种方式。

    【讨论】:

    • 我查看了 MVVM Light,虽然这不是我要去的方向,但网站上的 cmets 将我引导到 PRISM 框架和事件聚合器。谢谢你的提示!信使模式在我的应用程序中会做得很好。
    【解决方案2】:

    只是补充一下里德上面写的内容:

    当我实现了这个(在我的例子中使用 MVVM)时,我倾向于首先使用 Messenger/Mediator 模式来启动和运行,然后重构它以使用依赖注入。

    有关 Mediator 模式的一个很好的示例,请查看名为 Cinch (on V2 now I think). 的 Sasha Barbers MVVM 框架您可以下载所有源代码并查看他如何使用 Mediator - 这是一个非常好的示例。您还可以查看Reactive Extensions for .NET 上的 Microsoft Dev Lab 项目,该项目实现了 IObservable 和 IObserver - 与您的问题没有直接关系,但却是一种非常酷的消息传递方式。

    对于依赖注入,看看Microsoft Unity Application Block 的东西

    希望能有所帮助。

    【讨论】:

      【解决方案3】:

      您可以查看PRISM 框架(在 WinForms 中,这曾经是 CAB - 复合应用程序块)。它是 Microsoft 模式和实践的一部分。
      您可以使用事件发布和订阅以非常简单直接的方式在对象之间进行通信:

      //publish:
       eventAggregator.GetEvent<ItemAddedEvent>().Publish(MyItem);
      
      //subscribe:
      eventAggregator.GetEvent<ItemAddedEvent>().Subscribe(MyMethod);
      

      我还没有足够彻底地使用它,但是它们提供了大量的文档和完整的功能来支持 DI、命令和验证。值得一看!

      【讨论】:

        【解决方案4】:

        对我来说,这听起来像是您需要实现模型-视图-演示者模式。见MVP on MSDN

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-03
          • 2014-08-07
          • 2020-05-26
          • 2017-11-20
          • 2012-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多