2010-06-23 3 views
0

Я с немного о»неприятности ...Проблема в ListBox ItemTemplate связывания с использованием XML, как ItemsSource

Вот мой файл„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 для ListBox:
(Примечание: я не использовал <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 [email protected]}"> 
          </Grid> 
         </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 
</Grid> 

Я попытался установить XPath к "@ QID", а также, что не имеет никакого значения. Я осмотрел коллекцию myListBox.Items и подтвердил, что на самом деле это предметы XElement, которые выглядят как <mapping QID="..."><empty/></mapping>, поэтому я не думаю, что там есть проблема.

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

ответ

1

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

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

LINQ к XML объектам XDocument и XElement не используют XPath. Для получения информации о см. Практическое руководство. Связывание с XDocument, XElement или LINQ для XML Результаты запроса.

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

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

+0

aaaaaaah. я, должно быть, посмотрел на эту статью 3 раза и никогда не читал до конца. Благодаря! –

+0

Окончательное решение выглядело так:

Смежные вопросы