A DataGrid sample using XML data
I love LINQ, so I'm on a mission to use it in as many samples as possible. This one is pretty trivial but it took me a bit to put together all the pieces of loading up the xml file to getting the binding to recognize the correct attributes. Finally I stylized the DataGrid a bit by using a HeaderStyle.
A few notes:
- You need the WPF Toolkit. I'm using Visual Studio 2008 SP1.
- Add the WPF Toolkit dlls as resources.
- Add the xml file as an embedded resource.
Here's the code:
XAML
<Window x:Class="DataGridXML.Window1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="https://schemas.microsoft.com/wpf/2008/toolkit"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<Style TargetType="toolkit:DataGridColumnHeader" x:Key="MyHeaderStyle">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Foreground" Value="Blue"/>
</Style>
</Window.Resources>
<Grid>
<toolkit:DataGrid Name="dg1" ItemsSource="{Binding}" >
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn Header="Album Title" Binding="{Binding Path=Attribute[Title].Value}" HeaderStyle="{StaticResource MyHeaderStyle}" />
<toolkit:DataGridTextColumn Header="Artist" Binding="{Binding Path=Attribute[Artist].Value}" HeaderStyle="{StaticResource MyHeaderStyle}"/>
<toolkit:DataGridTextColumn Header="Release Date" Binding="{Binding Path=Attribute[ReleaseDate].Value}" HeaderStyle="{StaticResource MyHeaderStyle}" />
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
</Grid>
</Window>
CS (not the whole file, just add to the default Window1.xaml.cs file)
//add using statements for LINQ
using System.Xml;
using System.Xml.Linq;
…
public Window1()
{
InitializeComponent();
//Load XML file and set the DataGrid data context
XElement mymusic = XElement.Load("mymusic.xml");
dg1.DataContext = mymusic.Elements("Album");
}
VB (not the whole file, just add to the default Window1.xaml.vb file)
'add using statements for LINQ
Imports System.Xml
Imports System.Xml.Linq
…
Class Window1
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
'Load XML file and set the DataGrid data context
Dim mymusic As XElement = XElement.Load("mymusic.xml")
dg1.DataContext = mymusic.Elements("Album")
End Sub
End Class
XML (called mymusic.xml)
<Music>
<Album Title="Chris Sells Live" Artist="Chris Sells" ReleaseDate="2/5/2008" />
<Album Title="The Road to Redmond" Artist="Luka Abrus" ReleaseDate="4/3/2008" />
<Album Title="The Best of Jim Hance" Artist="Jim Hance" ReleaseDate="6/2/2008" />
</Music>
I used the following documentation which you might also find useful for more complex scenarios.
- DataGrid Feature Walkthrough
- DataGrid Styles and Templates
- How to: Bind to XDocument, XElement, or LINQ for XML Query Results
Margaret
Comments
Anonymous
November 25, 2008
PingBack from http://blog.a-foton.ru/index.php/2008/11/25/a-datagrid-sample-using-xml-data/Anonymous
February 08, 2012
Working solution siglingsoftware.blogspot.com/.../wpfc-binding-xml-to-datagrid.html