MVVM:如何从视图模型中调用视图上的方法?

时间:2014-08-14 14:40:28

标签: c# mvvm windows-runtime windows-store-apps

我是MVVM的新手,很遗憾可能是一个简单的问题。但是,我无法理解MVVVM中的哪种机制(我使用MVVMLight,如果有任何后果),以便编写简单的以下场景:

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

我知道我可以在viewmodel中创建一个属性并将其绑定到TB.Text。我可能也理解我应该创建从按钮B开始的命令,但是我应该在命令中做什么。当我没有引用WV时,如何调用WV.navigate(url)。这应该通过某些东西来解决,我没有像行为那样正确地把握?这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

您应该使用信使模式解决此问题:

这个想法是视图可以注册特定的消息类(在这种情况下例如是一个自己的NavigateToUriMessage类),视图模型可以向侦听消息类型的任何人发送此消息类的实例。在命令实现中,您只需发送此消息,视图将接收消息并更改Web视图的URI。

BTW:这种信使模式的想法是你可以更好地编写单元测试并将视图模型用于其他平台(对消息的反应可能不同)。

答案 1 :(得分:2)

另一种方法是为WebView类创建一个附加属性,您可以在其中绑定Uri属性。附加属性在绑定值更改时调用Navigate

查看此博客: