Проблема в привязке ListBox ItemTemplate с использованием XML в качестве источника элементов - PullRequest
0 голосов
/ 24 июня 2010

У меня немного неприятностей ...

Вот мой файл "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 -Совместимый 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>, поэтому я не думаю, что там есть проблема.

Конечный результат - список, который заполняется пустыми объектами. Я могу отфильтровать их, отсортировать и добавить к ним необязательный текст ... но любая привязка к исходному объекту остается без обработки.

1 Ответ

1 голос
/ 24 июня 2010

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

Некоторые цитаты оттуда:

LINQ to XML объекты XDocument и XElement не использует XPath. За Подробности см. Как: Привязать к XDocument, XElement или LINQ для XML Результаты запроса.

И пример того, как привязать XElement

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

...