XAML Array Static Data - Quick Reference
***This is a collection of snippets useful in quickly plumbing a control with data. I use these in demos, tutorials, prototypes, and when replying to forum questions.
NOTE: DO NOT TRY TO COPY FROM HERE, USE* THIS MSDN SAMPLES PAGE INSTEAD, AS THIS WON'T COPY/PASTE WELL
Array of String
<x:Array x:Key="stringArray" Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Bear</sys:String>
<sys:String>Bird</sys:String>
<sys:String>Cat</sys:String>
<sys:String>Cow</sys:String>
<sys:String>Dog</sys:String>
<sys:String>Elephant</sys:String>
<sys:String>Fish</sys:String>
<sys:String>Goat</sys:String>
<sys:String>Hamster</sys:String>
<sys:String>Horse</sys:String>
<sys:String>Insect</sys:String>
<sys:String>Sheep</sys:String>
<sys:String>Snake</sys:String>
<sys:String>Monkey</sys:String>
</x:Array>
Array of Int
<x:Array x:Key="intArray" Type="sys:Int32"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:Int32>0</sys:Int32>
<sys:Int32>1</sys:Int32>
<sys:Int32>2</sys:Int32>
<sys:Int32>3</sys:Int32>
<sys:Int32>4</sys:Int32>
<sys:Int32>5</sys:Int32>
<sys:Int32>6</sys:Int32>
<sys:Int32>7</sys:Int32>
<sys:Int32>8</sys:Int32>
<sys:Int32>9</sys:Int32>
</x:Array>
Array of Person
<x:Array x:Key="personArray" Type="local:Person"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:StaticDummyData.PocoModel">
<local:Person>
<local:Person.FirstName>Jack</local:Person.FirstName>
<local:Person.LastName>Jones</local:Person.LastName>
<local:Person.Age>42</local:Person.Age>
<local:Person.JoinDate>12/10/11</local:Person.JoinDate>
</local:Person>
<local:Person>
<local:Person.FirstName>Jill</local:Person.FirstName>
<local:Person.LastName>Johnson</local:Person.LastName>
<local:Person.Age>31</local:Person.Age>
<local:Person.JoinDate>10/09/08</local:Person.JoinDate>
</local:Person>
<local:Person>
<local:Person.FirstName>Tom</local:Person.FirstName>
<local:Person.LastName>Jones</local:Person.LastName>
<local:Person.Age>26</local:Person.Age>
<local:Person.JoinDate>08/02/12</local:Person.JoinDate>
</local:Person>
</x:Array>
I use two types of Person class. A POCO class for basic demos and XAML static data, and a INotifyPropertyChanged implemented version for binding examples.
A POCO Person class
using System;
namespace StaticDummyData.PocoModel
{
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public DateTime JoinDate { get; set; }
}
}
An INotifyPropertyChanged implemented Person class
using System;
using System.ComponentModel;
namespace StaticDummyData.MvvmModel
{
public class Person : INotifyPropertyChanged
{
string _FirstName;
public string FirstName
{
get
{
return _FirstName;
}
set
{
if (_FirstName != value)
{
_FirstName = value;
RaisePropertyChanged("FirstName");
}
}
}
string _LastName;
public string LastName
{
get
{
return _LastName;
}
set
{
if (_LastName != value)
{
_LastName = value;
RaisePropertyChanged("LastName");
}
}
}
int _Age;
public int Age
{
get
{
return _Age;
}
set
{
if (_Age != value)
{
_Age = value;
RaisePropertyChanged("Age");
}
}
}
DateTime _JoinDate;
public DateTime JoinDate
{
get
{
return _JoinDate;
}
set
{
if (_JoinDate != value)
{
_JoinDate = value;
RaisePropertyChanged("JoinDate");
}
}
}
void RaisePropertyChanged(string prop)
{
if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(prop)); }
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
XAML Usage Examples
The x:Array markup code above is placed in the Resources tag. If it is a durable project, place them in App.xaml (Application.Resources) and use as shown below:
<Window x:Class="StaticDummyData.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<ComboBox ItemsSource="{StaticResource stringArray}"/>
<ComboBox ItemsSource="{StaticResource intArray}"/>
<DataGrid ItemsSource="{StaticResource personArray}"/>
</StackPanel>
</Window>
If it is a quick demo, you can dump this on the same Page/Window/UserControl that uses it:
<Window x:Class="StaticDummyData.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<x:Array x:Key="stringArray" Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Bear</sys:String>
<sys:String>Bird</sys:String>
<sys:String>Cat</sys:String>
</x:Array>
</Window.Resources>
<StackPanel>
<ComboBox ItemsSource="{StaticResource stringArray}"/>
</StackPanel>
</Window>
You can even embed it in the actual control that consumes it, but then it has to be a DynamicReference:
<ComboBox ItemsSource="{DynamicResource stringArray}">
<ComboBox.Resources>
<x:Array x:Key="stringArray" Type="sys:String"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Bear</sys:String>
<sys:String>Bird</sys:String>
<sys:String>Cat</sys:String>
</x:Array>
</ComboBox.Resources>
</ComboBox>
These are all snippets I use regularly in my community work and in prototyping designs. I use this page as a quick reference for that purpose.
**NOTE: DO NOT TRY TO COPY FROM HERE, USE **THIS MSDN SAMPLES PAGE INSTEAD, AS THIS WON'T COPY/PASTE WELL
http://c.statcounter.com/8230423/0/326a99b9/1/