【问题标题】:Adding PushPins in Bing Maps在 Bing 地图中添加图钉
【发布时间】:2012-02-11 07:14:54
【问题描述】:

我正在尝试将图钉添加到 Bing 地图。图钉来自 JSON 提要。我想得到这样的东西: 我的代码第一次单独不起作用,我不明白为什么。 我的地图 ViewModel 是

public class MapViewModel : INotifyPropertyChanged
{
    public static ObservableCollection<PushpinModel> pushpins = new ObservableCollection<PushpinModel>();
    public static ObservableCollection<PushpinModel> Pushpins 
    {
            get { return pushpins; } 
        set { pushpins = value; } 
    }
}

Map xaml cs 是:

//Map.xaml.cs
public partial class Map : PhoneApplicationPage
{
    #define DEBUG_AGENT
    private IGeoPositionWatcher<GeoCoordinate> watcher;
    private MapViewModel mapViewModel;

    public Map()
    {
        InitializeComponent();
        mapViewModel = new MapViewModel();
        this.DataContext = mapViewModel;
    }

    private void page_Loaded(object sender, RoutedEventArgs e)
    {
        if (watcher == null)
        {

    #if DEBUG_AGENT
            watcher = new Shoporific.My.FakeGPS();
    #else      
            watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
    #endif
        }
        watcher.Start();

        mapViewModel.Center = watcher.Position.Location;
        PushpinModel myLocation = new PushpinModel() { Location = mapViewModel.Center, Content = "My Location" };
        MapViewModel.Pushpins.Add(myLocation);
        myLocation.RefreshNearbyDeals();
        watcher.Stop();
    }
}

最后是 PushPinModelClass:

public class PushPinModel
{
    public void RefreshNearbyDeals()
    {
        System.Net.WebClient wc = new WebClient();
        wc.OpenReadCompleted += wc_OpenReadCompleted;
        wc.OpenReadAsync(" a valid uri");
    }

    void wc_OpenReadCompleted(object sender, System.Net.OpenReadCompletedEventArgs e)
    {
        var jsonStream = e.Result;
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Deal[]));
        Deal[] deals = (ser.ReadObject(jsonStream) as Deal[]);

        if (deals.Any())
        {
                var currentLocation = MapViewModel.Pushpins.Where(pin => pin.Content == "My Location");
                MapViewModel.Pushpins = new ObservableCollection<PushpinModel>();
                foreach (var deal in deals)
                    MapViewModel.Pushpins.Add(new PushpinModel()
                    {
                        Content = deal.Store,
                        Location = new GeoCoordinate(deal.Location.Latitude, deal.Location.Longtitude),
                        Offers = deal.Offers,
                    });

        }
    }
}

我有点困惑,除了“我的位置”之外的图钉仅在第一次出现。它们第二次按预期出现(如果我向后导航然后再次移动到地图屏幕)。

【问题讨论】:

  • 一个快速提示,使用 WP7.1 工具,模拟器有一个 GPS 模拟器。您不需要 Shoporific.My.FakeGPS 类。
  • 是的,@ColinE:我知道这一点。但即使没有连接调试器,我也想要假 GPS。注意到#def DEBUG_AGENT 了吗?我需要这个来确保地图以 jacobs & Javits 中心为中心。我正在做这个作为原型。

标签: c# windows-phone-7 bing-maps


【解决方案1】:

wc_OpenReadCompleted 内部,您正在重新实例化MapViewModel.Pushpins

仅将构造函数调用到 ObservableCollection 一次(在您的情况下,在 MainViewModel 内)。再次调用它会破坏我假设您在 xaml 页面中的绑定。

我认为您应该在 PushpinViewModel 中删除该行或改为调用 MainViewModel.Pushpins.Clear()(取决于您要完成的工作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多