使用数据绑定将Bing地图居中

时间:2012-10-02 06:32:14

标签: windows-8 bing-maps winrt-xaml

我有一个ScrollViewer,其中包含一个包含Bing地图的ControlTemplate,请参阅下面的代码段。图钉已正确定位,因此纬度和经度属性具有正确的值,但地图始终位于非洲下方,我认为它是0,0位置...

<bing:Map 
    x:Name="Karta" 
    Grid.Row="5" 
    Grid.ColumnSpan="2" 
    HorizontalAlignment="Center" 
    Width="500" 
    Height="500" 
    ZoomLevel="5"
    Credentials="--removed--">
    <bing:Map.Center>
        <bing:Location Latitude="{Binding Latitud}" Longitude="{Binding Longitud}" />
    </bing:Map.Center>
    <bing:Map.Children>
        <bing:Pushpin x:Name="LokalPin" >
            <bing:MapLayer.Position>
                <bing:Location Latitude="{Binding Latitud}" Longitude="{Binding Longitud}" />
            </bing:MapLayer.Position>
        </bing:Pushpin>
    </bing:Map.Children>
</bing:Map>

以前我使用代码执行此操作(请参阅下文),但我想将其绑定。而且我认为我之后并没有使用<bing:Map Center>,但如果我从上面删除它就没有区别了。

MapLayer.SetPosition(LokalPin, loc);
Karta.SetView(loc, 12.0);

2 个答案:

答案 0 :(得分:1)

几个月太晚了,但也许其他人可以使用这个......我假设我们希望地图基于后备字段更新(不是在xaml中进行数据绑定,而是解决方法),并尝试使用支持字段的值使地图居中......

我做了什么,因为地图的数据绑定不起作用(很高兴在这里得到纠正)...... 我在包含地图的页面的代码隐藏文件中的intializecomponent()之后设置了viewmodel.propertychanged事件。

当viewmodel更新您想要用作地图中心的坐标属性时,会引发更改的事件,并通过从viewmodel读取新坐标来居中地图,例如:

    void CurrentViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
            {
                try
                {
                   if (e.PropertyName != "latitude") return;
                    //Karta is the name of the map
                    //assuming the properties are in double format, if not then just cast a double
                    //do something like this: 
                    var latitude = ViewModel.latitude;
                    var longitude =ViewModel.longitude;

                    Karta.Center = new Location(latitude,longitude);
                }
                Catch(Exception exception)
                {Debug.WriteLine(exception.Message);}
            }

这完全基于您的页面已引用或使用视图模型的假设,并且属性已更改附加到它们的某些通知属性...如果我关闭错误的切线...请随意跳过这个答案......哈哈!使用视图模型和后面代码中的viewmodel.propertychanged事件,可以轻松地对地图中心进行数据绑定。一旦你完成它就太容易了..

答案 1 :(得分:0)

要在C#中设置地图的视图,请使用

Karta.SetView(loc, zoomLevel);

其中loc是要设置中心的Location对象,zoomLevel是整数缩放级别。

你也可以在XAML中做到这一点,但似乎你错误地拼写了“Latitude”(Latitud)和“Longitude”(Longitud)

有关文档,请参阅here