使用Caliburn Micro和WP7调用地图控件的方法
我在使用Silverlight Map控件的Windows Phone 7应用程序中有一个页面(视图)。使用Caliburn Micro和WP7调用地图控件的方法
我需要在控件上调用SetView方法,但我想坚持MVVM风格来保留视图模型中的功能。
我打算在点击应用程序栏按钮后调用此方法,因此我无法通过EventArgs参数访问Map。
这样做的最好方法是什么?
我还没有与地图控制工作我自己,但这里的一对夫妇的想法把我的头顶部:
您可以发布使用该视图可以订阅的IEventAggregator事件并用它来调用SetView。
你可以实现一个自定义IResult,它使用ActionExecutionContext获取视图,找到地图控件并调用SetView。
您可以在您的视图模型上实现IViewAware(如果您从屏幕继承,则覆盖OnViewLoaded),并遵循更多的监督控制器方法,通过与视图交互以通过接口调用SetView。
我已经通过在视图模型上使用MapLocation属性,然后在视图中连接到视图模型的PropertyChanged事件来完成此操作。当属性是MapLocation属性时,我只需调用SetView并传递ViewModel的MapLocation属性的值。
我知道这不是“严格”MVVM,但我们在这里讨论的东西是视图特定的,但不能被束缚。 Rob提出的事件聚合器方法是另一个不错的选择,但在这种情况下看起来像是矫枉过正。我全力以赴与任何行之有效的和良好的性能为用户:)
我做了很多关于这个特定的事情的研究,这个问题是有帮助的。最终,我最终在ViewModel上创建了一个Microsoft.Phone.Controls.Maps.Map属性。我所要做的就是将xaml中的x:Name属性设置为视图模型上的Map属性的名称。然后,我可以轻松地从视图模型更新地图,并调用SetView。您只需更改地图的这些属性即可轻松更改地图中心并更改缩放级别,因此您只需在初始化时调用SetView即可。我相信你可以使用类似的技术来约束任何东西。 Map控件对于开箱即用的控件来说非常棒,并且与Caliburn.Micro很好地搭配。
感谢罗布,我会检查这些选项。我之前没有使用CM的这些部分,所以这是一个很熟悉的好机会。 – 2011-01-11 22:50:32