打开bing映射到绑定坐标

时间:2013-12-08 23:39:42

标签: c# wpf windows-phone-8

所以,当我导航到bing地图应该显示正确位置的页面时,我设置了数据上下文:

        protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var k = (app.MainPage.Country)PhoneApplicationService.Current.State["country"];
        DataContext = k;
    }

我在xaml中设置了位置:

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="0,0,0,0">
        <maps:Map x:Name="MyMap" Center="{Binding BingCoordinates}" ZoomLevel="10"/>
    </Grid>

BingCoordinates是这样的:41.333333,19.800000

但它不起作用。它打开一张地图,指向刚果,哈哈。如果我将代码更改为:

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="0,0,0,0">
        <maps:Map x:Name="MyMap" Center="41.333333,19.800000" ZoomLevel="10"/>
    </Grid>

它有效,如果我绑定坐标,为什么它不起作用?我可以用C#做​​到这一点,但我不知道如何绑定这样的坐标:

mapsTask.Center = new GeoCoordinate(41.333333,19.800000);

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

正如一些评论中所述,绑定失败的原因是指定的类型不是预期的类型(GeoCoordinate)。

要解决这个问题,我可以想到两种方法。哪一个实际上更合适取决于关于分离关注的想法。

  1. 更改数据源以提供可绑定的对象。 在您的viewmodel(数据上下文)中,您有一个名为“BingCoordinates”的属性。现在,Property似乎是字符串类型(根据我的理解)。将其类型更改为GeoCoordinate将解决您的问题。您所要做的就是将字符串解析为GeoCoordinate。 这可能会成功(未经测试):

    var r =  (string)query.Element("bingCoordinates").Split(',');
    BingCoordinates = new GeoCoordinate(r[0], r[1]);
    

    提示:GeoCoordinate构造函数第一个arg是纬度,后面是经度。 另请注意,如果要避免可能的异常,应使用拆分操作的空检查。

  2. 使用ValueConverter将源对象转换为视图“理解”的元素。 如果您出于某种原因决定模型的表示是准确的并且更改它,那么您可以随时根据需要将值转换为您需要的值。 为此,可以使用ValueConverter。 ValueConverter是一个实现IValueConverter接口的类,可以在绑定中用于将值转换为所需类型(最常见的示例:将布尔值(true / false)转换为Visibility类型)。 Learn more about value converters