最近我开始在Silverlight中使用PRISM。 假设我有一个View,其中包含一个特殊的Map控件,该控件包含我目前在我的代码中使用的方法,我想将其移至ViewModel。 例如:
private void DoSomething()
{
Map.ZoomTo(Layer.InitialExtent);
}
稍后我将需要使用更多方法,例如:
Map.PanTo(...);
Map.MapToScreen(...);
我知道对于属性我应该使用Binding。 但方法的做法是什么? (我当然不想把它留在后面的代码中。)
有人可以告诉我如何从ViewModel访问Controls方法吗?
答案 0 :(得分:1)
将其留在后面的代码中。听起来你正在做的是纯粹的视觉。 MVVM是View通过绑定等方式表达从ViewModel公开的数据的一种方式......如果没有办法在ViewModel中更改数据来表达您想要做的事情,那么将其留在后面的代码中。 MVVM并不意味着没有代码。
答案 1 :(得分:0)
我同意brianstewey。
MVVM与删除代码隐藏无关。 ViewModel就像是视图和模型之间的桥梁,但是如果你需要做只涉及视图的事情,那么代码应该在视图的代码隐藏中。比如那样的东西。
想一想:
你把那些地图放在你的VM上,明天你决定要为同一个视图模型做另一个视图,做与现有视图相同的事情,但不是使用那个特殊的地图,你将使用另一个控件。你会发现你的VM上有查看内容,而你的新视图上不需要它,因为它属于另一个视图。
简而言之,当某些内容只是查看内容时,请使用代码隐藏。