Silverlight Prism - 从视图模型访问视图中的控件方法

时间:2011-02-22 12:58:22

标签: silverlight data-binding mvvm silverlight-4.0 prism

最近我开始在Silverlight中使用PRISM。 假设我有一个View,其中包含一个特殊的Map控件,该控件包含我目前在我的代码中使用的方法,我想将其移至ViewModel。 例如:

private void DoSomething()
{ 
    Map.ZoomTo(Layer.InitialExtent); 
}

稍后我将需要使用更多方法,例如:

Map.PanTo(...);
Map.MapToScreen(...);

我知道对于属性我应该使用Binding。 但方法的做法是什么? (我当然不想把它留在后面的代码中。)

有人可以告诉我如何从ViewModel访问Controls方法吗?

2 个答案:

答案 0 :(得分:1)

将其留在后面的代码中。听起来你正在做的是纯粹的视觉。 MVVM是View通过绑定等方式表达从ViewModel公开的数据的一种方式......如果没有办法在ViewModel中更改数据来表达您想要做的事情,那么将其留在后面的代码中。 MVVM并不意味着没有代码。

答案 1 :(得分:0)

我同意brianstewey。

MVVM与删除代码隐藏无关。 ViewModel就像是视图和模型之间的桥梁,但是如果你需要做只涉及视图的事情,那么代码应该在视图的代码隐藏中。比如那样的东西。

想一想:

你把那些地图放在你的VM上,明天你决定要为同一个视图模型做另一个视图,做与现有视图相同的事情,但不是使用那个特殊的地图,你将使用另一个控件。你会发现你的VM上有查看内容,而你的新视图上不需要它,因为它属于另一个视图。

简而言之,当某些内容只是查看内容时,请使用代码隐藏。