WPF數(shù)據(jù)模板輕松實(shí)現(xiàn)數(shù)據(jù)顯示
我們在進(jìn)行開發(fā)程序的時候,經(jīng)常會碰到要處理一個圖形界面的需求。微軟公司根據(jù)這一需求,開發(fā)了一個叫做WPF的圖形界面顯示工具。#t#
在WPF中我們可以為自己的數(shù)據(jù)定制顯示方式,也就是說雖然某數(shù)據(jù)數(shù)據(jù)是一定的,但我們可以做到讓它的表現(xiàn)方式多種多樣,比如一個時間,在以前我們一般使用一個字符串(比如“12:03”)來顯示,但我們?yōu)槭裁淳筒荒茱@示一個小時鐘呢,其實(shí)這更合乎情理,利用WPF數(shù)據(jù)模板技術(shù)隨意并輕松地表現(xiàn)你的數(shù)據(jù).
WPF數(shù)據(jù)模板適用于Content Control類控件與Items Control類控件.
我們假設(shè)有如下一個類
- using System;
- namespace Demo
- {
- public class People
- {
- private string name;
- private string photo;
- public People(string
name, string photo) - {
- this.name = name;
- this.photo = photo;
- }
- public string Name
- {
- get
- {
- return this.name;
- }
- set
- {
- this.name = value;
- }
- }
- public string Photo
- {
- get
- {
- return this.photo;
- }
- set
- {
- this.photo = value;
- }
- }
- }
- }
這個類很簡單地表示了一個人,他的姓名和他的照片(路徑)
如果在我們的軟件中有一個列表控件ListBox來顯示一個由多個人組成的列表,在.net 3.0以前我們可能就只能用文本來列出人的姓名而已,或者花不少的精力來重寫列表控件以便在列表中在顯示人名的同時顯示照片.
參考以下代碼:
- < ListBox x:Name="ListBox_
PeopleList" ItemTemplate="
{StaticResource MyTemplate}" />
我們定義了一個ListBox,并將其ItemTemplate制定為我們自定義的MyTemplate,也就是說列表項(xiàng)將按照MyTemplate制定的方式來顯示列表內(nèi)容。
這樣我們就可以發(fā)揮我們的想像力來自定義MyTemplate
為了能在XAML中使用我們的People類,我們需要將其名字空間引入,參考以下代碼:
- xmlns:demo="clr-nam
espace:Demo"
其中Demo是我們的People類所在的名字空間,以后可以使用demo來表示這個名字空間了.
下面的代碼來定義我們的MyTemplate的WPF數(shù)據(jù)模板,以便告訴我們的列表如何來顯示他的項(xiàng)目:
- < Window.Resources>
- < !--列表模板-->
- < DataTemplate x:Key="MyTemplate"
DataType="{x:Type demo:People}">- < Grid VerticalAlignment="Center"
HorizontalAlignment="Center"
Margin="4,4,4,4" >- < Grid.ColumnDefinitions>
- < ColumnDefinition Width="Auto"/>
- < ColumnDefinition Width="Auto"/>
- < /Grid.ColumnDefinitions>
- < Image Source="{Binding Photo}"
Width="50" Height="50" Grid.Column=
"0" Grid.RowSpan="1"/>- < TextBlock Text="{Binding Name}"
Grid.Column="1" Grid.ColumnSpan="1"
HorizontalAlignment="Center" Vertical
Alignment="Center"/>- < /Grid>
- < /DataTemplate>
- < /Window.Resources>
我們將WPF數(shù)據(jù)模板定義為窗口的資源,資源保存在一個資源字典中的,x:Key="MyTemplate" 表示其在資源字典中的鍵,DataType="{x:Type demo:People}"表示該數(shù)據(jù)模板針對的數(shù)據(jù)類型是demo名字空間下的People類,接下來在Gird中我們定義了該數(shù)據(jù)模板的視覺樹,這也是我們的工作重心,即該視覺樹定義了如何顯示我們的數(shù)據(jù)。
我們使用了一個Image控件并將其Source綁定到People的Photo屬性上,這樣以便在該Imag控件上顯示照片,然后在Image的右邊我們使用一個TextBlock控件來顯示人名(將People的Name屬性綁定到TextBlock的Text屬性上)。
注意到這個數(shù)據(jù)模板實(shí)際上在干什么:它定義了People類型對象的表現(xiàn)方式,在這里是顯示People的照片并在照片的右方顯示姓名。
以后我們需要People對象按這種方式展示給用戶的時候,我們只要將該WPF數(shù)據(jù)模板指定給要顯示People對象的那個控件就可以了。
比如
- < ListBox x:Name=
"ListBox_PeopleList"
ItemTemplate="{Static
Resource MyTemplate}" />
就告訴我們的列表控件按照MyTemplate定義的方式來顯示其項(xiàng)目。
呵呵,這樣是不是比以前Code方式來打造一個個性列表控件來得更方便。