【问题标题】:Notification to View from ViewModel using MVVM Light使用 MVVM Light 从 ViewModel 查看通知
【发布时间】:2012-08-21 00:27:39
【问题描述】:

在我的 silverlight 应用程序中,我需要从 ViewModel 向 View 发送通知。作为对它的响应,应该调用 UI 控件上的方法。我知道有两种方法可以做到这一点:

1) 在 ViewModel 中引发一个事件,并在 View 后面的代码中处理它。
2) 从 ViewModel 发送消息(使用 MVVM Light 消息支持)并在 View 的代码中响应此消息。

我想知道是否有一种方法可以在不使用 View 代码中的代码的情况下完成此操作,例如通过 XAML 中的某种数据绑定?

请分享任何想法。

关于视图在收到来自 ViewModel 的通知时应该做什么的附加信息
在视图的 XAML 中,我声明了一个自定义 Silverlight 网格控件的实例,它具有以下方法:
public void FileExportFinished(bool fileExportSucceeded)
我想从 XAML 调用此方法,以响应从 ViewModel 收到的通知,传递一个与通知一起收到的布尔值。

【问题讨论】:

  • 这取决于你想处理什么,你想在哪里处理它以及你想如何处理它。也许DataTrigger
  • 您能多解释一下您要处理的内容吗?
  • 问题已更新,请查收。
  • @dvvrd 我认为 Silverlight 没有 DataTrigger
  • @Narek 可以在您的视图中包含代码隐藏。这样做并不违反 MVVM,只要这段代码是 View 逻辑。 MVVM 的真正目标是在您的代码背后没有业务逻辑。

标签: silverlight mvvm mvvm-light


【解决方案1】:

为什么不简单地在视图模型中使用属性并在 xaml 中使用 DataTrigger?

如果你想要某种对话框弹出,你可以使用一个对话框服务。你真的应该把你想做的事情添加到你的问题中。当通知到达时,您认为应该发生什么?

顺便说一句,Messenger 用于 viewmodel-viewmodel 通信,所以这不是一个选项。

【讨论】:

  • 感谢您的回复。我已经更新了问题并添加了更多详细信息,请检查。
  • 对于你更新的问题,我会使用你的选项 1。它不违反 mvvm,你可以做你需要的。
【解决方案2】:

是的...您可以在依赖属性的帮助下做到这一点。

  1. 为该视图创建一个依赖属性(使其成为布尔类型,因为我们只需要该属性来调用另一个视图方法)。
  2. 在其属性更改回调中,设置调用所需的视图方法。
  3. 然后将 DependencyProperty 与 ViewModel 中的属性绑定。
  4. 因此,当您需要更新视图时,只需设置上面提到的绑定属性,这将触发 Dependency 属性的属性更改回调,并在那里调用您所需的视图方法。

【讨论】:

  • 感谢您的回复,但我不知道如何避免在使用您的方法的视图代码中使用代码。
  • ok...所以你可以使用附加属性代替依赖,它可以写在任何类中。然后它的 on 属性发生了变化,您将获得发送者,在那里您可以将其投射到您的视图并调用所需的方法。抱歉以上建议\
  • 再次感谢,但这不是我要找的。​​span>
  • @Narek 附加属性建议不是您想要的吗?这对我来说听起来不错。它允许您在 ViewModel 上定义一个属性来触发您的控件上的方法调用......正是您所要求的。
  • Ryan 我得到了附加属性的想法,但这不是从 ViewModel 发送通知的好方法,因为我需要人为地更改 ViewModel 上的某些属性以触发视图中的操作,我也不确定如何使用这种方法从 ViewModel 传递参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2011-11-17
相关资源
最近更新 更多