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