0

インターネットから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();
            }

        }

アプリを閉じて再読み込みするようにユーザーに指示せずに、データをリストボックスに読み込む方法を探しています。

どんな助けでも大歓迎です。

4

1 に答える 1

0

最後に.toList()を使用して、linqクエリを結果に変換します。

  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
                                                               }).ToList<ContactItem>();

これでクエリが実行され、リストが返され、データをバインドできるようになります。

これで試してください(クエリ})。ToList();

于 2012-05-25T14:07:12.023 に答える