【问题标题】:Center a Bing map using databinding使用数据绑定将 Bing 地图居中
【发布时间】:2012-10-02 06:32:14
【问题描述】:

我有一个带有包含 Bing 地图的 ControlTemplate 的 ScrollViewer,请参阅下面的 sn-p。图钉的位置正确,因此纬度和经度属性具有正确的值,但地图始终以非洲为中心,我认为它是 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>

以前我使用代码(见下文)来完成此操作,但我想改为绑定它。而且我不认为我当时使用了&lt;bing:Map Center&gt;,但是如果我从上面删除它,则没有区别。

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

【问题讨论】:

  • 从那里获取纬度和经度进行绑定。看起来值是 0
  • 请提供您的代码隐藏代码/架构(Latitud 所在的位置等)。这可能是一个数据上下文问题
  • @Fixus:正如我在文中所说,图钉定位正确,这意味着纬度和经度具有正确的值。它们只是在 Map.Center 中使用时不绑定。

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


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

【讨论】:

    【解决方案2】:

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

    Karta.SetView(loc, zoomLevel);
    

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

    你也可以在 XAML 中这样做,但你似乎拼错了“纬度”(Latitud)和“经度”(Longitud)

    有关文档,请参阅 here

    【讨论】:

    • 是的,代码可以工作,我还在我的帖子中提到了这就是我在转向数据绑定之前所做的事情。但是,当将地图添加到 ControlTemplate 设置时,C# 中的属性不再有任何影响。所以我需要让数据绑定选项起作用。缺少的“e”只是瑞典语的相同术语,编程时始终使用瑞典语(包括类名中的åöä:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多