【问题标题】:Calling method of Map control with Caliburn Micro and WP7使用Caliburn Micro和WP7调用地图控件的方法
【发布时间】:2011-01-11 21:31:09
【问题描述】:

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

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

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

最好的方法是什么?

【问题讨论】:

    标签: silverlight mvvm windows-phone-7 caliburn.micro


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢 Rob,我会检查这些选项。我以前没有使用过 CM 的这些部分,所以这是一个熟悉的好机会。
    【解决方案2】:

    我通过在视图模型上拥有一个 MapLocation 属性,然后在视图中连接到视图模型的 PropertyChanged 事件来做到这一点。当属性为 MapLocation 属性时,我只需调用 SetView 并传入 ViewModel 的 MapLocation 属性的值即可。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-20
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        相关资源
        最近更新 更多