从Windows Phone 8中的XML文件查询中获取Null

时间:2014-10-01 16:54:03

标签: c# xml windows-phone-8

我尝试从我的xml文件" favorite.xml"中查询产品名称和产品图片。在应用程序开始时,将它全部放在最喜欢的产品列表中。我的查询语句就像这样

 private void Favorite_Load()
        {
            var storage = IsolatedStorageFile.GetUserStoreForApplication();
            fileName = "Favorite\\favorite.xml";
            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(fileName, FileMode.Open, storage))
            {
                lst_product1.Items.Clear();
                XDocument doc = XDocument.Load(isoStream);

                //Check if there is favorite element in the favorite.xml file
                if (doc.Root.Descendants("favorite").Count() > 0)
                {
                    var data = from query in doc.Descendants("favorite")
                               orderby query.Attribute("id").Value
                               select new ProductsDry
                               {
                                   favID = query.Attribute("id").Value,
                                   favProCate = query.Attribute("cate_xml").Value,
                                   favProId = query.Attribute("pro_id").Value,
                                   favProImage = query.Attribute("pro_image").Value,
                                   favProName = query.Attribute("pro_name").Value

                               };
                    lst_product1.ItemsSource = data; // data=null
                }

                isoStream.Position = 0;
                isoStream.Dispose();
            }
        }

这是我的#34; favorite.xml"文件

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--Favorite's xml-->
<favorites>
  <favorite id="1" pro_id="1" pro_name="Boots Expert Anti-Blemish Cleansing Foam" cate_xml="ProductsOily.xml" pro_image="images/Oily-Dry/BO001.JPG" />
  <favorite id="2" pro_id="3" pro_name="Cerave foaming facial cleanser" cate_xml="ProductsOily.xml" pro_image="images/Oily-Dry/CV001.JPG" />
  <favorite id="3" pro_id="9" pro_name="L'Oreal Paris Go 360 Clean Anti-Breakout Facial Cleanser" cate_xml="ProductsOily.xml" pro_image="images/Oily-Dry/LO003.JPG" />
  <favorite id="4" pro_id="10" pro_name="Olay Foaming Face Wash - Sensitive" cate_xml="ProductsOily.xml" pro_image="images/Oily-Dry/OL014.JPG" />
  <favorite id="5" pro_id="22" pro_name="Alpha Hydrox Sheer Silk Moisturizer SPF 15 Sunscreen " cate_xml="ProductsOily.xml" pro_image="images/Oily-Dry/bp256.1.jpg" />
</favorites>

然而,毕竟它没有在列表中显示任何内容,而是显示类似项目路径的内容,并且在调试时我的查询为空。

How it show on favorite page

之前,我总是使用此代码读取数据并从xml文件中显示它,但xml文件不在Isoloated Storage中。我知道这次是从Isoloated Storage读取的;因此,必须有不同的东西。请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

这里有两件事:

  1. 您的data对象在断点处为空,因为data是一个仅定义但尚未执行的LINQ查询。查询将在请求它时立即执行,例如列表视图。您可以清楚地看到它正常工作,否则您在视图中看不到任何内容。实际上你不需要在这方面做任何改变,但是如果它给你带来了麻烦,那么在查询结束时添加ToList()将在定义时执行查询,而data将不再是空。

  2. ProductsDry仅显示为“路径”,因为视图不知道如何显示它,默认表示为string。覆盖ToString()的{​​{1}}函数应该为您提供ProductsDry表示,但如果您想要显示图像或其他自定义视图,则可能还不够。为此,您必须调整列表视图以正确显示string个对象。

  3. [1]请参阅http://blogs.msdn.com/b/charlie/archive/2007/12/09/deferred-execution.aspx作为LINQ和延迟执行的参考。