0

我的 Windows Phone 7 应用程序中有一个使用 Silverlight Map 控件的页面(视图)。

我需要在控件上调用SetView方法,但我想坚持在视图模型中保留功能的 MVVM 风格。

我计划在单击应用程序栏按钮后调用此方法,因此我无法通过 EventArgs 参数访问 Map。

最好的方法是什么?

4

3 回答 3

1

我自己没有使用过地图控件,但我想到了一些想法:

  1. 您可以使用 IEventAggregator 发布事件,该视图可以订阅并用于调用 SetView。

  2. 您可以实现一个自定义 IResult,它使用 ActionExecutionContext 来获取视图,找到地图控件并在其上调用 SetView。

  3. 您可以在您的视图模型上实现 IViewAware(或者如果您从 Screen 继承,则覆盖 OnViewLoaded)并通过调用 SetView 的接口与视图交互来遵循更监督控制器的方法。

于 2011-01-11T21:42:54.977 回答
0

我通过在视图模型上具有 MapLocation 属性,然后在视图中连接到视图模型的 PropertyChanged 事件来完成此操作。当属性是 MapLocation 属性时,我只需调用 SetView 并传入 ViewModel 的 MapLocation 属性的值。

我知道这不是“严格”的 MVVM,但我们在这里谈论的是特定于视图但不能绑定的东西。Rob 建议的事件聚合器方法是另一个不错的选择,但在这种情况下似乎有点矫枉过正。我完全赞成使用任何效果良好且对用户具有良好性能的东西:)

于 2011-01-12T13:59:53.887 回答
0

我对这个特定的事情做了很多研究,这个问题很有帮助。最终,我最终在我的 ViewModel 上创建了一个 Microsoft.Phone.Controls.Maps.Map 属性。我所要做的就是将 xaml 中的 x:Name 属性设置为属性的名称,即视图模型上的 Map。然后我可以轻松地从视图模型更新地图,并调用 SetView。您只需更改地图的这些属性即可轻松更改地图的中心并更改缩放级别,因此您实际上只需要在初始化时调用 SetView 。我相信你可以使用类似的技术绑定任何东西。Map 控件对于开箱即用的控件来说非常棒,并且与 Caliburn.Micro 配合得非常好。

于 2012-04-21T16:59:08.080 回答