He buscado y probado varias soluciones, pero hasta ahora ninguna solucionó mi problema. Estoy usando el DataGrid integrado de WPF en Visual Studio 2010/.NET4 para mostrar datos de un documento XML almacenado como XDocument.¿Cómo vincular correctamente xml al WPF DataGrid?
Mi código funciona bien, y he verificado que el XDocument está presente y es correcto. Sin embargo, DataGrid no muestra ningún dato.
El XML es similar a esto (simplificado para mayor claridad):
<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>
Mi XAML se parece a esto:
<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>
El C# que lo respalda simplemente asigna un nuevo XDocument (descargado desde una servicio web) a la propiedad TrackList (que implementa INotifyPropertyChanged). No se realiza ningún procesamiento adicional en él.
He intentado anteriormente utilizar XLinq, para enlazar a un resultado de la consulta, que tampoco funcionó (mismo problema), así que pensé en probar el enfoque XPath para evitar escribir una declaración Linq potencialmente errónea, y probar para encontrar el problema
Me estoy quedando sin ideas sobre cómo hacer que DataGrid se muestre correctamente. Mi comprensión de cómo se supone que funciona esto es claramente deficiente, por lo que agradecería mucho cualquier ayuda ofrecida.
Editar: Vale la pena señalar que tengo cierta flexibilidad con el formato de datos de entrada, ya que estoy descargando XML sin procesar. Voy a probar algunas de las sugerencias y ver a qué puedo llegar para trabajar.
Esto genera una InvalidOperationException con el mensaje "La colección de elementos debe estar vacía antes de usar ItemsSource. Esto ocurre al realizar la asignación a DataContext, o en el controlador de evento para PropertyChanged, por lo que evita cualquier implementación. Editar: No it does ' t, me olvidé de agregar alrededor de las definiciones de mi columna. –
IanGilham
La excepción fue mi error. Esto funciona bien. – IanGilham
Oh, hombre, depurar xaml puede ser desagradable. – Natxo