0

这是我的 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 中使用“路径”,因为不允许使用 XPath,我收到此错误:The property 'XPath' was not found in type 'Binding'

现在,我在这里做错了什么?它是 C# 中的 WP7.1 应用程序,使用 Visual Studio Express for Windows Phone 在 Windows 8 Consumer Preview 上运行。

4

2 回答 2

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}" />
于 2012-05-27T13:18:47.667 回答
1

Windows Phone 不支持使用 XPath 进行绑定。

So the only way to solve this is by deserializing the xml and binding to a .NET object.

Make sure, if you are going to allow the user to change the data or the refresh the data from the source that you implement INotifyPropertyChanged on the class so the UI gets notified of changes in the object.

于 2012-05-27T14:02:42.937 回答