Windows 8应用程序XAML/C#:使用一种方法将多个图钉设置为Bing地图
在使用XAML&C#的Windows8应用程序中,我正在努力在Bing地图上添加一组纬度和经度作为图钉 使用事件处理程序(如在地图上单击鼠标右键)逐个添加图钉效果良好 以下是XAML:Windows 8应用程序XAML/C#:使用一种方法将多个图钉设置为Bing地图,c#,windows-8,winrt-xaml,bing-maps,pushpin,C#,Windows 8,Winrt Xaml,Bing Maps,Pushpin,在使用XAML&C#的Windows8应用程序中,我正在努力在Bing地图上添加一组纬度和经度作为图钉 使用事件处理程序(如在地图上单击鼠标右键)逐个添加图钉效果良好 以下是XAML: <bm:Map x:Name="myMap" Grid.Row="0" MapType="Road" ZoomLevel="14" Credentials="{StaticResource BingMapAPIKey}" ShowTraffic="False" Tapped="map_Tapped" &g
<bm:Map x:Name="myMap" Grid.Row="0" MapType="Road" ZoomLevel="14" Credentials="{StaticResource BingMapAPIKey}" ShowTraffic="False" Tapped="map_Tapped" >
<bm:Map.Center>
<bm:Location Latitude="-37.812751" Longitude="144.968204" />
</bm:Map.Center>
</bm:Map>
以上所有工作。如果我点击地图,就会添加一个新的图钉
现在,当我在列表上迭代初始化页面时尝试添加图钉时,地图上只显示列表的最后一个图钉,就好像每个新图钉都覆盖了前一个图钉一样。以下是我使用的代码:
protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
...
// The Venue class is a custom class, the Latitude & Logitude are of type Double
foreach (Venue venue _venues)
{
Bing.Maps.Location location = new Location(venue.Latitude, venue.Longitude);
// Place Pushpin on the Map
Pushpin pushpin = new Pushpin();
pushpin.RightTapped += pushpin_RightTapped;
MapLayer.SetPosition(pushpin, location);
myMap.Children.Add(pushpin);
// Center the map on the clicked location
myMap.SetView(location);
}
...
}
protected override async void LoadState(对象导航参数,字典页面状态)
{
...
//场地等级为自定义等级,纬度和逻辑等级为双重类型
foreach(场馆)
{
Bing.Maps.Location位置=新位置(地点.纬度,地点.经度);
//把图钉放在地图上
图钉图钉=新图钉();
图钉。右螺纹+=图钉_右螺纹;
MapLayer.SetPosition(图钉,位置);
myMap.Children.Add(图钉);
//在单击的位置将地图居中
myMap.SetView(位置);
}
...
}
正如您所看到的,我使用了相同的代码,但是在LoadState方法的末尾,map只显示最后一个位置。如果您想知道,foreach循环对于每个位置都是完全执行的
有没有办法让它工作,或者更好,直接将贴图子对象绑定到图钉对象的可观察集合?我觉得我离得很近,但我不知道我错过了什么
请帮忙 您应该在数组(或列表或更有效的LocationCollection)中保留不同的位置,并且只有在循环遍历元素之后才调用SetView方法
LocationCollection locationCollection = new LocationCollection ();
// The Venue class is a custom class, the Latitude & Logitude are of type Double
foreach (Venue venue _venues)
{
Bing.Maps.Location location = new Location(venue.Latitude, venue.Longitude);
// Place Pushpin on the Map
Pushpin pushpin = new Pushpin();
pushpin.RightTapped += pushpin_RightTapped;
MapLayer.SetPosition(pushpin, location);
myMap.Children.Add(pushpin);
locationCollection.Append(location);
}
myMap.SetView(new LocationRect(locationCollection));
对不起,这次我登录是为了能够进一步评论。。。我尝试了你的建议(感谢LocationCollection课程,我不知道有这样的收藏)。但这并没有改变我的问题:locationCollection确实已正确填充(有49个位置),但地图上只显示一个图钉。您确定集合中添加了不同的位置吗。是否已将SetView()调用移出循环。验证locationCollection关于坐标值的内容。是的,就是这样。。。我现在真的很傻,花了这么多时间寻找关于Bing地图图钉的解决方案,而实际上是我的数据模型填充了好几次相同的位置。。。谢谢你的帮助,尼古拉斯:)
LocationCollection locationCollection = new LocationCollection ();
// The Venue class is a custom class, the Latitude & Logitude are of type Double
foreach (Venue venue _venues)
{
Bing.Maps.Location location = new Location(venue.Latitude, venue.Longitude);
// Place Pushpin on the Map
Pushpin pushpin = new Pushpin();
pushpin.RightTapped += pushpin_RightTapped;
MapLayer.SetPosition(pushpin, location);
myMap.Children.Add(pushpin);
locationCollection.Append(location);
}
myMap.SetView(new LocationRect(locationCollection));