0

我有一个实现 MVVM 模式的 WPF 窗口。该窗口显示用户应该从中选择的可用麦克风列表。然后将选定的麦克风存储在我们的存储库中。所有这一切都很好,但这是问题所在。当您插入新麦克风时,主窗口会启动,并显示一条消息,例如:“插入了新设备,您要选择它吗”。如果他们单击此消息,则应该会弹出选择窗口,其中包含已选择的新设备。但是,我试图将 UI 保持为真正的 MVVM 模式,xaml 后面没有代码。以下是我想到的一些选项,但不确定是否有“正确”的方法来做到这一点。

  • 有一个通用的全局动作控制器,它将被传递到 ViewModel。然后 ViewModel 可以订阅一个事件,例如SelectionChangedEvent
    • 这样做的问题是窗口(以及视图模型)可能尚未打开,因此消息会丢失。
  • 使用上面的选项,但是让动作控制器总是首先加载窗口。这将解决 ViewModel 不可用的问题。
  • 其他一些我没有想到的解决方案?
4

1 回答 1

1

事件聚合器模式通常用于启用视图模型之间的间接通信。关于这个主题有很多很好的链接。我喜欢Jeremy Miller 的脑残,但它需要一些背景阅读才能完全理解。

事件聚合器的基本要点是它充当一种消息总线,任何人都可以注册以接收消息通知,并且任何人都可以将消息发布到 EA。在您的特定情况下,将有 3 条注意消息:

  1. 添加了新设备
  2. 请求设备选择
  3. 选择的设备

您的主窗口将发布新设备添加消息。(或者它可以跳过发布并仅触发请求设备选择消息,RDS 消息上的属性之一可能是默认选择)。请求设备选择应该会显示设备选择对话框。当用户选择设备时,它会触发 Device Selected 消息(其中应包含有关所选设备的信息)。

有兴趣知道已选择新设备的人将注册该事件并做出相应的响应。

于 2012-10-01T19:08:14.943 回答