Я искал и пробовал различные решения, но до сих пор никто из них не решает мою проблему. Я использую встроенный DataGrid из WPF в Visual Studio 2010/.NET4 для отображения данных из XML-документа, хранящегося в XDocument.Как связать xml с WPF DataGrid правильно?
Мой код работает нормально, и я подтвердил, что XDocument присутствует и исправлен. Однако DataGrid не отображает никаких данных.
XML-выглядит следующим образом (упрощенно для ясности):
<data>
<track>
<id>211</id>
<name>Track Name</name>
<duration>156</duration>
<artist_id>13</artist_id>
<artist_name>Artist Name</artist_name>
<album_id>29</album_id>
<album_name>Album Name</album_name>
</track>
...
</data>
Моя XAML выглядит следующим образом:
<DataGrid x:Name="LibraryView" Grid.Row="1"
DataContext="{Binding Path=TrackList}" ItemsSource="{Binding XPath=/data/track}">
<DataGridTextColumn Header="Title" Binding="{Binding XPath=name}"/>
<DataGridTextColumn Header="Artist" Binding="{Binding XPath=artist_name}"/>
<DataGridTextColumn Header="Album" Binding="{Binding XPath=album_name}"/>
<DataGridTextColumn Header="Length" Binding="{Binding XPath=duration}"/>
</DataGrid>
C#, который поддерживает это просто назначает новый XDocument (выгружаемых с веб-сервис) в свойство TrackList (которое реализует INotifyPropertyChanged). Дальнейшая обработка на нем не производится.
Я ранее пытался использовать XLinq для привязки к результату запроса, который тоже не работал (такая же проблема), поэтому я решил попробовать XPath, чтобы избежать написания потенциально глючного оператора Linq и попробовать чтобы найти проблему.
У меня заканчиваются идеи о том, как правильно отобразить DataGrid. Мое понимание того, как это должно работать, явно отсутствует, поэтому я бы очень признателен за любую помощь.
Редактировать: Стоит отметить, что у меня есть определенная гибкость с форматом входных данных, поскольку я загружаю необработанный XML. Я попробую некоторые из предложений и посмотрю, что я могу приступить к работе.
В результате возникает сообщение InvalidOperationException с сообщением: «Элемент коллекции должен быть пуст перед использованием ItemsSource.Это происходит при выполнении назначения DataContext или в обработчике событий для PropertyChanged, поэтому предотвращает либо реализацию. Редактировать: Нет, t, я забыл добавить вокруг моих определений столбцов. –
IanGilham
Исключение было моей ошибкой. Это прекрасно работает. – IanGilham
О, человек, отладка xaml может быть неприятной. – Natxo