我正在从互联网上提取一个 XML 文件并将其加载到手机上。一切正常,减去列表框在应用程序初始加载时未更新。
应用程序的简单路径如下:
在应用程序加载时,如果它已连接到 Internet,它会运行更新联系人方法。如果不是,它会检查它是否是第一次加载,如果是,它会在运行应用程序之前通知用户连接到移动或无线网络,否则它会加载旧数据。
在 update 方法中,它检查 web 服务以查看自上次更新以来是否有任何更新。如果它是第一次加载,它说已经有 2000 次更新,强制更新。如果更新次数大于零,它会运行下载然后加载数据(这是这里的问题),否则它会加载旧数据(当前数据)。
问题是下载后,它不会加载数据。这是所述项目的代码。
获取数据函数:
private void getData()
{
try
{
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
IsolatedStorageFileStream isoFileStream = myIsolatedStorage.OpenFile("contacts.xml", FileMode.Open);
using (StreamReader reader = new StreamReader(isoFileStream))
{
XElement xmlContact = XElement.Parse(reader.ReadToEnd());
lstContacts.ItemsSource = from contact in xmlContact.Descendants("contact")
select new ContactItem
{
ImageSource = contact.Element("Image").Value,
FName = contact.Element("FName").Value,
LName = contact.Element("LName").Value,
Extension = contact.Element("Extension").Value,
Email = contact.Element("Email").Value,
Cell = contact.Element("Cell").Value,
Title = contact.Element("TitleName").Value,
Dept = contact.Element("deptName").Value,
Office = contact.Element("officename").Value,
ID = contact.Element("ID").Value
};
}
}
}
catch
{
}
}
更新功能:
void contact_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
return;
}
XElement xmlContact = XElement.Parse(e.Result);
string updates = xmlContact.Element("updates").Element("number").Value;
if (firstrun)
{
updates = "2000";
settings["firstRun"] = (bool)false;
}
MessageBox.Show(updates);
if (Convert.ToInt32(updates) > 0)
{
MessageBox.Show("Updating Contacts");
ContactReader cr = new ContactReader("http://domain.tld/RLContactApp/getContactsWP7.php?sqlQueryType=C&lastUpdated=01%2F01%2F2000&format=xml", "contacts.xml");
bool downloaded = cr.Download();
if (downloaded)
{
getData();
}
}
else
{
MessageBox.Show("Not Updating Contacts");
getData();
}
}
我正在寻找一种方法来让数据加载到列表框中,而不告诉用户关闭应用程序并重新加载它。
任何帮助是极大的赞赏。