gpt4 book ai didi

c# - 组合 WPF View 和 MVVM View 模型

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:55 26 4
gpt4 key购买 nike

我有一个带有嵌套 WPF UserControl 的 UI,每个 UserControl 都有自己的 View 模型。 View (XAML) 层次结构的一个简单例子是:

MainWindow
|-> Logical group
|-> Logical control
|-> Second logical group
|-> Third logical group
|-> Logical control

每个 XAML View 都有一个封装交互逻辑的 ViewModel。我的问题是关于将 ViewModel 状态从父 View 模型传递到 subview 模型。

例如,MainWindow 中的用户交互可以在 MainWindowViewModel 中设置一个 CurrentlySelectedGroup 变量。我需要知道 LogicalControlViewModel 中的那个值是什么。

我正在考虑通过两种主要方式来做到这一点。首先,我可以广播一个事件 DispatchGroupSelected,然后在 LogicalControlViewModel 中分配一个委托(delegate)作为该事件的监听器。其次,我可以绑定(bind)LogicalControlViewModelMainWindowViewModelCurrentlySelectedGroup 属性。

我的第一直觉是使用事件在父 View 模型和 subview 模型之间进行通信。我认为绑定(bind)最好保持在 View 模型和它的 View 之间。到目前为止,事件一直用于我的 ViewModel 和命令之间的通信。如果有另一个可能的方向会更好,我很想听听。

最佳答案

你试过消息总线吗??有几个框架可以实现这种模式:

  • PRISM,有一个 EventAggregator,您可以在其中定义契约(Contract),然后发送和接收通知。
  • MVVM Light,还有一个MessageBus 你可以了解一下here .
  • RectiveUI,这是我最喜欢的,它结合了 Reactive Extensions Observable 的强大功能和消息总线模式,可以找到一些文档 here .

使用此模式,您的 ViewModel 可以以松散耦合的方式与其他 ViewModel 通信,因为每个 ViewModel 只发送一条消息,而不关心谁会收听它。如果 ViewModel 想要监听特定的消息类型,它可以订阅以仅获取这些消息。

关于c# - 组合 WPF View 和 MVVM View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8811356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com