0

以下の例のようなXMLデータがあり、それをListViewにバインドしようとしています。例の車のブランドである要素名をバインドするのに問題があります。この投稿から、XPathでのローカル名のXamlサポートは、xamlがxpath関数名をサポートしていないことを発見しました。したがって、local-name()は機能しません。しかし、これを行う方法が必要です...

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525">
  <Window.Resources>
    <XmlDataProvider x:Key="DataSource">
      <x:XData>
        <Cars xmlns="">
          <Data>
            <Honda Year="2012"
                   Color="Red"
                   Model="Accord" />
            <Subuar Year="2008"
                    Color="Blue"
                    Model="Outback" />
            <Ford Year="2000"
                  Color="Black"
                  Model="Focus" />
          </Data>
        </Cars>
      </x:XData>
    </XmlDataProvider>
  </Window.Resources>
  <ListView ItemsSource="{Binding XPath=Cars/Data/*}"
            DataContext="{StaticResource DataSource}">
    <ListView.View>
      <GridView>
        <GridViewColumn DisplayMemberBinding="{Binding XPath=???}"
                        Header="Brand" />
        <GridViewColumn DisplayMemberBinding="{Binding XPath=@Year}"
                        Header="Year" />
        <GridViewColumn DisplayMemberBinding="{Binding XPath=@Color}"
                        Header="Color" />
        <GridViewColumn DisplayMemberBinding="{Binding XPath=@Model}"
                        Header="Model" />
      </GridView>
    </ListView.View>
  </ListView>
</Window>
4

2 に答える 2

1

通常のisを使用する場合は、オブジェクトBinding.Pathのプロパティにバインドする必要があるので、試してみてください。DataContextXmlElement{Binding Name}

于 2012-11-30T08:24:56.520 に答える
1

要素名にバインドできるとは思いません。「name()」または「local-name()」XPath関数が必要ですが、Xamlではサポートされていません。あなたはそれを回避することができます、このURLを見てください:

XPathでのlocal-name()のXAMLサポート

しかし、これは機能し、hack-arほど醜くはなく、わずかに異なるXML入力が必要です。

<Window.Resources>
    <XmlDataProvider x:Key="DataSource">
        <x:XData>
            <Cars xmlns="">
                <Data>
                    <Car Brand="Honda" Year="2012" Color="Red" Model="Accord"/>
                    <Car Brand="Subuaru" Year="2008" Color="Blue" Model="Outback"/>
                    <Car Brand="Ford" Year="2000" Color="Black" Model="Focus"/>
                </Data>
            </Cars>
        </x:XData>
    </XmlDataProvider>
</Window.Resources>
<ListView ItemsSource="{Binding XPath=Cars/Data/*}" DataContext="{StaticResource DataSource}">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding XPath=@Brand}" Header="Brand"/>
            <GridViewColumn DisplayMemberBinding="{Binding XPath=@Year}" Header="Year"/>
            <GridViewColumn DisplayMemberBinding="{Binding XPath=@Color}" Header="Color"/>
            <GridViewColumn DisplayMemberBinding="{Binding XPath=@Model}" Header="Model"/>
        </GridView>
    </ListView.View>
</ListView>
于 2012-11-30T03:02:54.447 に答える