从mvvm中的Tap事件中获取bing map的位置

时间:2013-04-01 12:22:00

标签: c# windows-phone-7 mvvm bing-maps

当我点击地图控件时,我正试图获取位置。我知道如何获得它,但我想在ViewModel中创建它。对于Tap事件,我使用交互。

<map:Map CopyrightVisibility="Collapsed" LogoVisibility="Collapsed">
            <map:MapTileLayer>
                <map:MapTileLayer.TileSources>
                    <customMap:OpenStreetTile />
                </map:MapTileLayer.TileSources>
            </map:MapTileLayer>
            <map:MapLayer>
                <map:Pushpin Location="{Binding Location}" />
            </map:MapLayer>
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Tap">
                    <cmd:EventToCommand Command="{Binding AddPushpinCommand}" PassEventArgsToCommand="True" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </map:Map>

我可以使用GetPosition函数从eventarguments中获取位置。但是这个函数需要UIElement参数。我这样做了:

var source = (e.OriginalSource as MapLayer).ParentMap;
        var point = e.GetPosition(source);
        Location = source.ViewportPointToLocation(point);

但我不确定这是不是很好的解决方案。你知道怎么做吗? 感谢

1 个答案:

答案 0 :(得分:2)

嗯,你的方法肯定有效,有时候,足够好就足够了。 ;)如果你想用你的MVVM实现100%清理,你应该避免引用视图(以及MapLayer类)。

Joost van Schaik写了一篇博文,展示了如何使用行为实现这一目标(适用于Windows Phone 8,但我确信它也适用于Windows Phone 7):http://dotnetbyexample.blogspot.nl/2013/03/simple-reverse-geocoding-with-windows.html