这是我的XML
<?xml version="1.0" encoding="utf-8"?>
<app>
<films>
<film name="Haha" year="2008" />
<film name="Haha" year="2008" />
<film name="Haha" year="2008" />
<film name="Haha" year="2008" />
<film name="Haha" year="2008" />
<film name="Haha" year="2008" />
</films>
</app>
这是我的XAML
<ListBox x:Name="listBoxControl">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<StackPanel>
<TextBlock Text="{Binding Path=@name}" />
<TextBlock Text="{Binding Path=@year}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
这是我的C#
XDocument xmldoc = XDocument.Load(new StringReader(result));
listBoxControl.ItemsSource = xmldoc.Descendants("film");
在过去的几个小时里,我已经搜索了互联网和Stack Overflow问题,希望能找到解决方案。我正在做的是,从我的网站异步下载一些XML数据,然后将其传递给名为“listBoxControl”的ListBox控件。问题是“文本”字段不会在其中呈现任何文本。我在Binding中使用“Path”,因为不允许使用XPath,我收到此错误:The property 'XPath' was not found in type 'Binding'
现在,我在这里做错了什么?它是C#中的WP7.1应用程序,使用在Windows 8 Consumer Preview上运行的Visual Studio Express for Windows Phone。
答案 0 :(得分:1)
我只是创建一个类并绑定到它:
public class Film
{
public string name { get; set; }
public string year { get; set; }
}
var d = xmldoc.Descendants("film").Select(x => new Film { name = x.Attribute("name").Value, year = x.Attribute("year").Value });
<TextBlock Text="{Binding name}" />
<TextBlock Text="{Binding year}" />
编辑:或匿名类型:
var d = xmldoc.Descendants("film").Select(x => new { name = x.Attribute("name").Value, year = x.Attribute("year").Value });
<TextBlock Text="{Binding name}" />
<TextBlock Text="{Binding year}" />
答案 1 :(得分:1)
Windows Phone不支持使用XPath进行绑定。
所以解决这个问题的唯一方法是通过反序列化xml并绑定到.NET对象。
确保,如果您要允许用户更改数据或刷新您在类上实现INotifyPropertyChanged的源中的数据,以便UI通知对象中的更改。