[英]How to bind the xml element name to a ListView column in WPF XAML file
我有類似於下面的例子的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>
我認為你不能綁定到元素名稱,需要“name()”或“local-name()”XPath函數,但Xaml不支持它們。 您可以解決此問題,請參閱此URL:
但這確實有效,並不像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>
如果你使用普通的Binding.Path
應該綁定到DataContext
對象的屬性,該對象應該是一個XmlElement
所以只需嘗試{Binding Name}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.