0

我有点麻烦...

这是我的“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 的方法:(
注意:我没有<XMLDataProvider>在 XAML 中使用,因为它提供了一组,而不是我想要使用XML.XMLElement的 LINQ-Compatible 。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> 所以我认为那里没有问题。

最终结果是一个列表框,其中填充了空对象。我可以过滤它们,对它们进行排序,并向它们添加非绑定文本......但是对源对象的任何绑定都不会呈现。

4

1 回答 1

1

http://msdn.microsoft.com/en-us/library/system.windows.data.binding.xpath.aspx

那里的一些引述:

LINQ to XML 对象 XDocument 和 XElement 不使用 XPath。有关详细信息,请参阅如何:为 XML 查询结果绑定到 XDocument、XElement 或 LINQ。

还有一些如何绑定到 XElement 的示例

http://msdn.microsoft.com/en-us/library/cc165615.aspx

于 2010-06-23T21:02:44.497 回答