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

過去数時間、解決策を期待して、インターネットとスタック オーバーフローの質問を探し回っています。私が行っているのは、Web サイトから XML データを非同期的にダウンロードし、それを「listBoxControl」という ListBox コントロールに渡すことです。問題は、「テキスト」フィールドにテキストが表示されないことです。XPath が許可されていないため、Binding 内で「Path」を使用しています。次のエラーが発生します。The property 'XPath' was not found in type 'Binding'

さて、私はここで何が間違っていますか?これは、Windows 8 Consumer Preview で実行されている Windows Phone 用の Visual Studio Express を使用した C# の WP7.1 アプリです。

4

2 に答える 2

1

XPathを使用したバインドは、WindowsPhoneではサポートされていません。

したがって、これを解決する唯一の方法は、xmlを逆シリアル化し、.NETオブジェクトにバインドすることです。

ユーザーがデータを変更したり、クラスにINotifyPropertyChangedを実装したソースからデータを更新したりできるようにする場合は、UIにオブジェクトの変更が通知されるようにしてください。

于 2012-05-27T14:02:42.937 に答える
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 に答える