wpf - wpf mvvm使用命令在 View 模型之间传递参数

标签 wpf mvvm c#-4.0 mvvm-light

这是我第一次尝试MVVM。我的应用程序的核心是松散地基于Josh Smith的msdn文章。而且我还在使用mvvm light框架。

我有一个主窗口,其中包含一个命令列表区域和一个工作区,该区域将用户控件/ View 显示为Tabitem,每个用户控件都有一个对应的ViewModel。 mainWindow还有一个包含我的命令列表的 View 模型,而工作区 View 模型有一个基本的工作区 View 模型。

我的默认 View 具有MappingSets的主数据网格,可以具有一个选定的项目。这些命令将启动带有 View 的新标签项,这些 View 可根据所选项目处理MappingSet详细信息。我有一个View/ViewModel,根据所使用的命令,它应该返回一个Tabitem(用于创建不包含现有数据的新MappingSet),或者一个Tabitem,其中包含用于编辑的所选项目的详细信息,或者一个Tabitem,其包含以下内容:新MappingSet的基础。

设置好场景后,我仍然无法解决的是依赖于命令的方式来传递参数(例如,所选MappingSet对象的标识符)以上述三种状态之一实例化我的 View 模型?例如,mvvmlight Messenger是否适合此任务?

最佳答案

对于Messenger/EventAggregator,这是一个完美的方案。但是,您的消息链可能有点困惑。据我了解,您的主窗口包含命令列表(如菜单或功能区)。这是我如何看待事件链。

  • 您从数据网格中选择一个MappingSet,这将导致触发MappingSetSelected消息(具有所选MappingSet的有效负载)
  • 主窗口监听该消息并存储当前选择的MappingSet
  • 当用户单击按钮时,将触发“EditMappingSet”或“CreateNewMappingSet”消息(或者如果Window负责创建新 View ,则它会自己创建它们)。
  • 关于wpf - wpf mvvm使用命令在 View 模型之间传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4652187/

    相关文章:

    c# - 从事件 c# 中取消订阅 lambda 表达式

    wpf - 如何调试 MVVM 中的数据绑定(bind)问题?

    Silverlight 和 MV(VM) 模式 - 无代码隐藏 - 这可能吗?

    wpf - EventTrigger 未触发 UserControl 的 Loaded 事件

    c# - 如何根据用户输入动态查看用户控件?

    c#-4.0 - 为什么图像二值化显示的结果较差?

    c# - MVVM 设计感觉太笨重,我做错了吗?

    c# - 如何读取文件 (Metro/WinRT)

    c# - WPF 组合框 : Different template in textbox and drop-downlist

    c# - 只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句