所以,当我导航到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);
感谢您的帮助:)
答案 0 :(得分:0)
正如一些评论中所述,绑定失败的原因是指定的类型不是预期的类型(GeoCoordinate)。
要解决这个问题,我可以想到两种方法。哪一个实际上更合适取决于关于分离关注的想法。
更改数据源以提供可绑定的对象。 在您的viewmodel(数据上下文)中,您有一个名为“BingCoordinates”的属性。现在,Property似乎是字符串类型(根据我的理解)。将其类型更改为GeoCoordinate将解决您的问题。您所要做的就是将字符串解析为GeoCoordinate。 这可能会成功(未经测试):
var r = (string)query.Element("bingCoordinates").Split(',');
BingCoordinates = new GeoCoordinate(r[0], r[1]);
提示:GeoCoordinate构造函数第一个arg是纬度,后面是经度。 另请注意,如果要避免可能的异常,应使用拆分操作的空检查。
使用ValueConverter将源对象转换为视图“理解”的元素。 如果您出于某种原因决定模型的表示是准确的并且更改它,那么您可以随时根据需要将值转换为您需要的值。 为此,可以使用ValueConverter。 ValueConverter是一个实现IValueConverter接口的类,可以在绑定中用于将值转换为所需类型(最常见的示例:将布尔值(true / false)转换为Visibility类型)。 Learn more about value converters