我有点麻烦......
这是我的“mappings.xml”文件......
<?xml version="1.0" encoding="utf-8"?>
<mappings>
<mapping QID="info1">
<empty></empty>
</mapping>
<mapping QID="info2">
<empty></empty>
</mapping>
</mappings>
我的方法加载XML并将其设置为列表框的ItemsSource:
(注意:我没有在XAML中使用<XMLDataProvider>
,因为它提供了一组XML.XMLElement
,而不是我想要使用的LINQ兼容XElement
。
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
在XAML中
<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
对象,看起来像<mapping QID="..."><empty/></mapping>
,所以我认为那里没有问题。
最终结果是一个用空对象填充的listBox。我可以过滤它们,对它们进行排序,并向它们添加非绑定文本......但是对源对象的任何绑定都是未渲染的。
答案 0 :(得分:1)
http://msdn.microsoft.com/en-us/library/system.windows.data.binding.xpath.aspx
有人引用那里:
LINQ to XML对象XDocument和 XElement不使用XPath。对于 详细信息,请参见如何:绑定到 XDocument,XElement或XML的LINQ 查询结果。
以及如何绑定到XElement的一些示例