0

我正在从互联网上提取一个 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();
            }

        }

我正在寻找一种方法来让数据加载到列表框中,而不告诉用户关闭应用程序并重新加载它。

任何帮助是极大的赞赏。

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>();

现在这将执行查询并返回列表,这将能够绑定数据。

试试这个 (query }).ToList();

于 2012-05-25T14:07:12.023 回答