1、在VS2008中创建一个新项目CustomTypesInXaml,在此项目下我们新建两个类,一个是Client类,一个是AsiaClients类。两个类的代码分别如下:
Client.cs代码:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace CustomTypesInXaml
{
public class Client
{ //Client对象表示一个Client人的属性
public Client()
{
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string Age { get; set; }
}
}
AsiaClient.cs代码,此类将会用到我们前面定义的Client类,是Client类的列表
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic; //需要添加此空间
namespace CustomTypesInXaml
{
public class AsiaClients
{
public AsiaClients()
{
TheAsiaClient = new List<Client>();
}
public List<Client> TheAsiaClient { get; set; } }
}
2、在Page.xaml文件中我们需要做如下工作。
(1)、在xaml头部引入 xmlns:ClientType="clr-namespace:CustomTypesInXaml",这样我们才能够在page.xaml文件中使用我们前面C#定义的两个类。
(2)、创建UserControl.Resources段
<UserControl.Resources>
<ClientType:AsiaClients x:Key="MyAsianClients">
<ClientType:AsiaClients.TheAsiaClient>
<ClientType:Client FirstName="Joe" LastName="Zhou" Age="32"/>
<ClientType:Client FirstName="David" LastName="Wang" Age="33"/>
<ClientType:Client FirstName="Josh" LastName="Li" Age="28"/>
</ClientType:AsiaClients.TheAsiaClient>
</ClientType:AsiaClients>
</UserControl.Resources>
在此段中我们引用了前面使用C#代码定义的两个类并在此处完成对此两个类的初始化赋值。
(3)、在UI部分完成界面设计和数据绑定,在此我们设计了一个List,并把它我我们在上面创建的数据进行绑定显示,此段代码如下:
<Grid x:Name="LayoutRoot" Background="White">
<ListBox
DataContext="{StaticResource MyAsianClients }"
ItemsSource="{Binding TheAsiaClient}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding FirstName}" Margin="5,0,0,0" ></TextBlock>
<TextBlock Text="{Binding LastName}" Margin="5,0,0,0" ></TextBlock>
<TextBlock Text="{Binding Age}" Margin="5,0,0,0" ></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
Page.xaml文件的全部代码如下:
<UserControl x:Class="CustomTypesInXaml.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ClientType="clr-namespace:CustomTypesInXaml"
Width="400" Height="300">
<UserControl.Resources>
<ClientType:AsiaClients x:Key="MyAsianClients">
<ClientType:AsiaClients.TheAsiaClient>
<ClientType:Client FirstName="Joe" LastName="Zhou" Age="32"/>
<ClientType:Client FirstName="David" LastName="Wang" Age="33"/>
<ClientType:Client FirstName="Josh" LastName="Li" Age="28"/>
</ClientType:AsiaClients.TheAsiaClient>
</ClientType:AsiaClients>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<ListBox
DataContext="{StaticResource MyAsianClients }"
ItemsSource="{Binding TheAsiaClient}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding FirstName}" Margin="5,0,0,0" ></TextBlock>
<TextBlock Text="{Binding LastName}" Margin="5,0,0,0" ></TextBlock>
<TextBlock Text="{Binding Age}" Margin="5,0,0,0" ></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</UserControl>
在此,我们无需在Page.xaml.cs后台写任何代码即完成了在xmal文件中初始化、引用和显示我们用C#自定义类的工作。