【问题标题】:Databinding to TextBlock in WP7在 WP7 中对 TextBlock 进行数据绑定
【发布时间】:2012-09-14 03:44:40
【问题描述】:

这是我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?> 
    <Kids> 
      <Child> 
        <Name>Kid1</Name> 
        <FirstName>hisname</FirstName> 
      </Child> 
    <Child> 
        <Name>kid2</Name> 
        <FirstName>SomeName</FirstName> 
      </Child> 
    </Kids> 

我使用 Linq to XML 来读取我的 xml 文件。 现在我想将结果数据绑定到我的文本块中 windows phone 7 应用程序。 我有一个名为 SerializeKidToXml 的类。在那个类中,我有一个名为 ReadXML 的函数,如下所示:

  public string ReadXml()
        {
            StringBuilder s = new StringBuilder();
            using (IsolatedStorageFileStream test = new IsolatedStorageFileStream("YourKids.xml", FileMode.Open, store))
            {

                var testxdoc = XDocument.Load(test);
                var returnval = from item in testxdoc.Descendants("Kids").Elements("Child")
                                select new
                                {
                                    kind = item.Element("FirstName").Value
                                };
                return s.Append(returnval).ToString();

            }
        }

现在我希望此查询的结果与位于的文本块绑定 在 XAML 页面的界面上。我正在尝试使用 XAML 页面后面的代码来绑定它。这就是我现在拥有的:

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            SerializeKidToXml t = new SerializeKidToXml();
            textBlock1.Text = t.ReadXml();

        }

XAML 页面上的文本块没有显示结果字符串,而是显示: System.LINQ.Enumerable......

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 保存 xml 文件数据的 UI 和结构示例会很有帮助。

标签: linq windows-phone-7 data-binding


【解决方案1】:

这可能会对您有所帮助:

  var returnval = from item in testxdoc.Descendants("Kids").Elements("Child")
         select item.Element("FirstName").Value;

     foreach(var str in returnval)
     { 
        s.Append(", ");
        s.Append(str);
     }
     return s.ToString();

如果您想在列表框中显示孩子:

public IEnumerable<string> ReadXml()
        {
            using (IsolatedStorageFileStream test = new      IsolatedStorageFileStream("YourKids.xml", FileMode.Open, store))
            {    
                var testxdoc = XDocument.Load(test);
                var collection = from item in testxdoc.Descendants("Kids").Elements("Child")
                                select item.Element("FirstName").Value;
                return collection;

            }
        }

并使用它:

   SerializeKidToXml t = new SerializeKidToXml();
   listBox.ItemsSource = t.ReadXml();

【讨论】:

  • 感谢它部分工作,因为现在文本块显示:{ kind = Johnny }。如何删除 { kind = ?
  • 我现在没有 Vusial Studio,所以请尝试更新的代码。
  • 哇,谢谢。是否可以使用列表框而不是文本块?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多