インターネットからXMLファイルを取得して、電話にロードしています。アプリケーションの初期ロード時にリストボックスが更新されないことを除いて、すべてが正常に実行されています。
アプリケーションの簡単なパスは次のとおりです。
アプリケーションのロード時に、インターネットに接続している場合は、連絡先の更新メソッドを実行します。そうでない場合は、それが最初のロードであるかどうかをチェックし、そうでない場合は、アプリケーションを実行する前にモバイルまたはワイヤレスネットワークに接続するようにユーザーに通知します。そうでない場合は、古いデータをロードします。
updateメソッドでは、Webサービスをチェックして、最後の更新以降に更新があったかどうかを確認します。最初のロードの場合、2000回の更新があったことを示し、更新を強制します。更新番号がゼロより大きい場合は、ダウンロードを実行してからデータをロードします(これがここでの問題です)。それ以外の場合は、古いデータ(現在のデータ)をロードします。
問題はダウンロード後、データをロードしないことです。上記のアイテムのコードは次のとおりです。
getData関数:
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();
}
}
アプリを閉じて再読み込みするようにユーザーに指示せずに、データをリストボックスに読み込む方法を探しています。
どんな助けでも大歓迎です。