Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 8应用程序XAML/C#:使用一种方法将多个图钉设置为Bing地图_C#_Windows 8_Winrt Xaml_Bing Maps_Pushpin - Fatal编程技术网

Windows 8应用程序XAML/C#:使用一种方法将多个图钉设置为Bing地图

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

在使用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" >
      <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));