2

我有一个带有 Bing 地图的 ControlTemplate 的 ScrollViewer,请参见下面的代码段。图钉定位正确,因此纬度和经度属性具有正确的值,但地图始终以非洲为中心,我认为它是 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);
4

2 回答 2

1

几个月太晚了,但也许其他人可以使用它...我假设我们希望地图基于支持字段更新(不是 xaml 中的数据绑定,而是一种解决方法),并试图将使用支持字段的值映射...

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

当视图模型更新您要用作地图中心的坐标属性时,将引发更改的事件,并且我通过从视图模型读取新坐标来使地图居中,例如:

    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 事件对地图中心进行数据绑定是一件轻而易举的事。完成后太容易了。。

于 2013-05-02T10:27:49.277 回答
0

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

Karta.SetView(loc, zoomLevel);

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

您也可以在 XAML 中执行此操作,但您似乎拼错了“纬度”(Latitud)和“经度”(Longitud)

有关文档,请参见此处

于 2012-10-02T11:04:27.437 回答