如何从视图模型调用视图上的方法

本文关键字:视图 方法 调用 模型 | 更新日期: 2023-09-27 18:17:57

我对MVVM很陌生,所以很抱歉可能是一个简单的问题。然而,我无法理解从MVVVM(我使用MVVMLight,如果这有任何后果)使用哪种机制来编程简单的以下场景:

我有文本框TB,用户可以在其中填写URL。然后我有一个按钮B和webview WV。如果用户点击按钮,应用程序应该从TB中获取文本并显示在WV中。

我知道我可以在viewmodel中创建一个属性并将其绑定到TB.Text。我也可能理解,我应该创建命令,这将从按钮B绑定,但我应该在命令中做什么。我如何能调用WV.导航(url),当我没有引用到WV。这个问题应该通过一些我没有正确理解的东西来解决,比如行为吗?最好的方法是什么?

如何从视图模型调用视图上的方法

对于这个问题,您应该使用信使模式:

  • http://msdn.microsoft.com/en-us/magazine/dn745866.aspx
  • http://www.codeproject.com/Tips/696340/Thinking-in-MVVMLight-Messenger
  • http://mytoolkit.codeplex.com/wikipage?title=Messenger
这个想法是视图可以注册特定的消息类(在这种情况下,例如一个自己的NavigateToUriMessage类),并且视图模型可以将这个消息类的实例发送给侦听该消息类型的任何人。在命令实现中,您只需发送此消息,视图接收该消息并更改web视图的URI。

顺便说一句:这个信使模式的思想是,您可以更好地编写单元测试,并在其他平台上使用视图模型(在这些平台上对消息的反应可能不同)。

另一种方法是为WebView类创建一个附加属性,您可以将Uri属性绑定到该属性。当绑定值发生变化时,附加的属性调用Navigate

查看这个博客:

  • http://blogs.msdn.com/b/wsdevsol/archive/2013/09/26/binding-html-to-a-webview-with-attached-properties.aspx