c# - 如何从 MVVMLight 中的 ViewModel 中的 View 获取结果(调用链从 ViewModel 开始)

标签 c# wpf mvvm mvvm-light

我有一种情况,我的 View 应该做一些与 UI 相关的事情(例如序列化 UI 布局或 COM 调用,...)我想发送一条消息并从我的 ViewModel 中的 UI 获取该计算。那么我该如何从消息发送中获取输出?

1-使用回调方法作为Message的参数并从 View 中回调它。

2- 在 ViewModel 中放置一个属性并设置此属性以响应 View 中的消息调用。

我更喜欢第一个,对吗?还有其他方法吗?

似乎不清楚,但调用链在 ViewModel 中开始意味着我需要模拟类似于 ViewModel 的函数调用形式的东西来查看并获取此调用的结果。

最佳答案

我会在这里做的很简单:只需从您的 View 中调用您的 ViewModel 的方法。

编辑:

我不是 MVVM 中消息传递的忠实粉丝,我经常更喜欢事件。所以我会使用的简单方法是:

  • ViewModel 公开了一个公共(public)事件。
  • View 将处理程序附加到 ViewModel 的事件。
  • ViewModel 引发事件
  • View 执行处理程序(代码隐藏)和:
  • 调用 ViewModel 的公共(public)方法
  • 调用事件处理程序的 EventArgs 参数中包含的回调

  • 如果您不喜欢事件而更喜欢消息传递,那是一样的:它是回调 vs 公共(public)方法/属性(这里我总是更喜欢方法 vs 属性 setter ,因为我不喜欢在 setter 中添加硬逻辑和异常管理)。

    所以要回答这个问题:我会选择更简单的 IMO 的公共(public)方法。

    关于c# - 如何从 MVVMLight 中的 ViewModel 中的 View 获取结果(调用链从 ViewModel 开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015119/

    相关文章:

    c# - 有没有办法告诉 Resharper 6 忽略新的异步语言功能?

    c# - 使用具有默认访问权限的自动实现的属性而不是使用公共(public)字段有什么优点?

    .net - 制作 "hotkey"以在 WPF 中聚焦 TextBox

    WPF 文本 block : How to evenly space displayed characters?

    c# - 折叠行时动态调整数据网格列的大小

    javascript - knockout - 通知属性(property)变更

    c# - 从DataGrid按钮获取CommandParameter

    c# - 无法将 ICollection<t> 转换为 IEnumerable<t>

    c# - Linq Group By Into 附加参数

    c# - 将 MVVM 命令绑定(bind)到 UWP 中的 TimePicker 控件