Windows phone 7 windows phone正在从MainViewModel加载数据

Windows phone 7 windows phone正在从MainViewModel加载数据,windows-phone-7,Windows Phone 7,可能没有问题。 我正在开发一个mvm wp7应用程序,其中地图显示沙龙的图钉。从链接检索数据库 我正在努力解决的问题是,无法从应用程序加载可观察的收集数据。_ViewModel(json序列化程序解析数据库并正常工作)。调试时,应用程序会显示一张普通地图,仅此而已。从数据库返回字符串属性时,会导致该代码中断。我也尝试了messagebox来显示字符串,但仍然崩溃 代码如下: mainviewmodel.cs 公共类主视图模型 { 公共bool已加载{get;private set;} p

可能没有问题。 我正在开发一个mvm wp7应用程序,其中地图显示沙龙的图钉。从链接检索数据库

我正在努力解决的问题是,无法从应用程序加载可观察的收集数据。_ViewModel(json序列化程序解析数据库并正常工作)。调试时,应用程序会显示一张普通地图,仅此而已。从数据库返回字符串属性时,会导致该代码中断。我也尝试了messagebox来显示字符串,但仍然崩溃

代码如下:

mainviewmodel.cs

公共类主视图模型 {
公共bool已加载{get;private set;}

    public ObservableCollection<SalonViewModel> SalonCollection { get; private set; }


    public MainViewModel()
    {
        IsDataLoaded = false; 
    }

    public ObservableCollection<SalonViewModel> LoadData()
    {
        SalonCollection = new ObservableCollection<SalonViewModel>();
        var wednesday = new Uri("http://blehbleh.txt");
        WebClient wc = new WebClient();
        wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
        wc.OpenReadAsync(wednesday);

        return SalonCollection;
    }

    public void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    { 
        try
        { 
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ObservableCollection<SalonViewModel>));
            ObservableCollection<SalonViewModel> list = serializer.ReadObject(e.Result) as ObservableCollection<SalonViewModel>;

            foreach (SalonViewModel b in list)
            { 
               SalonCollection.Add(new SalonViewModel { sid=b.sid,sname=b.sname,sgeo_lat=b.sgeo_lat,sgeo_lon=b.sgeo_lon, 

            }

            this.IsDataLoaded = true;

        }
        catch (Exception ex)
        {
            //throw ex;
            MessageBox.Show(ex.Message);
        }
    }

这是mappage.cs

已加载专用void沙龙地图(对象发送方,路由目标e) {

             foreach (SalonViewModel Salon in App._viewModel.LoadData)
             {
                 MessageBox.Show(Salon.sname);
                 Pushpin p = new Pushpin();
                 p.Content = Salon.sname + System.Environment.NewLine + "Rate: "; 
                 Layer.AddChild(p, new GeoCoordinate(Salon.sgeo_lon, Salon.sgeo_lat)); 
             }

             Map1.Children.Add(Layer); 

         }

在您的
MainViewModel
LoadData
函数中,
OpenReadAsync()
是一个异步函数,因此在下一行返回
SalonCollection
将返回一个空的
observeCollection
,因为回调函数
wc\u OpenReadCompleted
尚未运行

另外,
MessageBox.Show
崩溃的原因是您试图在非UI线程上调用UI函数(此处的解决方案:)

与其返回
observateCollection
并手动将子对象添加到地图,不如尝试将
map
MapItemsControl
层绑定到视图模型的
observateCollection
。这里有一个不错的示例:

             foreach (SalonViewModel Salon in App._viewModel.LoadData)
             {
                 MessageBox.Show(Salon.sname);
                 Pushpin p = new Pushpin();
                 p.Content = Salon.sname + System.Environment.NewLine + "Rate: "; 
                 Layer.AddChild(p, new GeoCoordinate(Salon.sgeo_lon, Salon.sgeo_lat)); 
             }

             Map1.Children.Add(Layer); 

         }