Wpf 使用XML作为itemssource的ListBox ItemTemplate绑定中存在问题
我有点麻烦 这是我的“mappings.xml”文件 在XAML中Wpf 使用XML作为itemssource的ListBox ItemTemplate绑定中存在问题,wpf,listbox,linq-to-xml,datatemplate,itemssource,Wpf,Listbox,Linq To Xml,Datatemplate,Itemssource,我有点麻烦 这是我的“mappings.xml”文件 在XAML中 <Grid> <ListBox x:Name="myListBox" ScrollViewer.VerticalScrollBarVisibility="Auto" DockPanel.Dock="Bottom" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.VirtualizationMode="Recycling"
<Grid>
<ListBox x:Name="myListBox" ScrollViewer.VerticalScrollBarVisibility="Auto" DockPanel.Dock="Bottom" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.VirtualizationMode="Recycling" VirtualizingStackPanel.IsVirtualizing="True" SelectionMode="Extended">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<!-- WHY DOESN'T THIS WORK?? -->
<TextBlock Text="{Binding XPath=@QID}">
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
我也尝试过将XPath设置为“@QID”,这没有什么区别。我检查了myListBox.Items
集合,确认这些项目实际上是XElement
对象,看起来像
,因此我认为没有问题
最终结果是一个用空对象填充的列表框。我可以对它们进行过滤、排序,并向它们添加未绑定的文本。。。但是,对源对象的任何绑定都不会被描述。
其中有人引述:
LINQ到XML对象XDocument和
XElement不使用XPath。对于
详细信息,请参见如何:绑定到
XDocument、XElement或LINQ for XML
查询结果
以及一些如何绑定到XElement的示例
aaaah。那篇文章我一定看了三遍,从来没有读到底。谢谢最终的解决方案是这样的
Private Property myCollectionView as CollectionView
Private Property mappingsEnum as IEnumerable(Of System.Xml.Linq.XElement)
Sub LoadXML()
mappingsEnum = XDocument.Load("mappings.xml").Root.Elements
'using collection view so I can apply
'filtering to the list of <mapping> objects
myCollectionView = CollectionViewSource.GetDefaultView(mappingsEnum)
myListBox.ItemsSource = myCollectionView
End Sub
<Grid>
<ListBox x:Name="myListBox" ScrollViewer.VerticalScrollBarVisibility="Auto" DockPanel.Dock="Bottom" ScrollViewer.CanContentScroll="True" VirtualizingStackPanel.VirtualizationMode="Recycling" VirtualizingStackPanel.IsVirtualizing="True" SelectionMode="Extended">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<!-- WHY DOESN'T THIS WORK?? -->
<TextBlock Text="{Binding XPath=@QID}">
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>