WPF---數據模板(一)


一、場景模擬

假設我們現在有如下需求:

我們需要在ListBox中的每個Item中顯示某個成員的姓名、年齡以及喜歡的顏色,點擊Item的時候,會在右邊顯示詳細信息,同時也想讓ListBox的樣式變得好看一些,比如帶有綠色邊框等。

為了實現以上需求,我們可以使用控件模板來修改ListBox的默認樣式,使之變得生動有趣,使用數據模板來改變ListBoxItem的數據呈現形式。

二、Demo

為了改變ListBoxItem的外觀,我們在資源里定義一個名字為listBoxItemTemplate的數據模板模板中使用Binding將數據進行關聯,然后為ListBox的ItemTemplate屬性進行賦值

當我們點擊左面ListBoxItem的時候,為了能在右面顯示詳細信息,我們定義四個Label,綁定左側選中的ListBoxItem。

為了綁定方便,我們為四個Label加個父容器StackPanel,並將它的DataContext屬性綁定到選中的ListBoxItem上(四個Label的DataContext就會繼承StackPanel的DataContext屬性)。

具體代碼以及運行截圖參見以下:

 1 using System.Collections.ObjectModel;
 2 using System.Windows;
 3 
 4 namespace DataTemplateDemo1
 5 {
 6     /// <summary>
 7     /// Interaction logic for MainWindow.xaml
 8     /// </summary>
 9 
10     public partial class MainWindow : Window
11     {
12         private ObservableCollection<Student> observableCollection = new ObservableCollection<Student>();
13         public  ObservableCollection<Student> ObservableCollection
14         {
15             get { return observableCollection; }
16             set { observableCollection = value; }
17         }
18         public MainWindow()
19         {
20             InitializeComponent();
21             this.DataContext = this;
22             observableCollection.Add(new Student() {Name = "Tom", Age= 16, FavorColor="Red",Hobby="Swim" });
23             observableCollection.Add(new Student() { Name = "Maty", Age = 18, FavorColor = "Green" ,Hobby="Football"});
24             observableCollection.Add(new Student() { Name = "Alice", Age = 19, FavorColor = "Yellow" ,Hobby="Running"});
25         }
26     }
27 
28     public class Student
29     {
30         public int Age { get; set; }
31         public string Name { get; set; }
32         public string FavorColor { get; set; }
33         public string Hobby { get; set; }
34     }
35 
36 }

 

 1 <Window x:Class="DataTemplateDemo1.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
 5         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 6         xmlns:local="clr-namespace:DataTemplateDemo1"
 7         mc:Ignorable="d"
 8         Title="DataTemplateDemo" Height="350" Width="525">
 9     <Window.Resources>
10 
11         <ControlTemplate x:Key="ListBoxControlTemplate" TargetType="ListBox">
12             <Grid>
13                 <Border BorderBrush="Green" BorderThickness="1" CornerRadius="5" >
14                     <Grid>
15                         <ItemsPresenter TextBlock.Foreground="Green"></ItemsPresenter>
16                     </Grid>
17                 </Border>
18             </Grid>
19         </ControlTemplate>
20 
21         <DataTemplate x:Key="listBoxItemTemplate">
22             <Grid Height="50">
23                 <Grid.ColumnDefinitions>
24                     <ColumnDefinition Width="150"/>
25                     <ColumnDefinition Width="50"/>
26                 </Grid.ColumnDefinitions>
27                 <Grid.RowDefinitions>
28                     <RowDefinition/>
29                     <RowDefinition/>
30                 </Grid.RowDefinitions>
31                 <TextBlock  Name="textbox1" Text="{Binding Name}" Grid.Row="0" Margin="5"/>
32                 <TextBlock  Name="textbox2" Text="{Binding Age}" Grid.Row="1" Margin="5"/>
33                 <Rectangle Fill="{Binding FavorColor}" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" Margin="3"></Rectangle>
34 
35             </Grid>
36         </DataTemplate>
37     </Window.Resources>
38     <Grid>
39         <StackPanel Orientation="Horizontal">
40 
41             <ListBox Margin="5" Name="stuList"
42                  Template="{StaticResource ListBoxControlTemplate}" 
43                  ItemsSource="{Binding ObservableCollection}" 
44                  ItemTemplate="{StaticResource listBoxItemTemplate}">
45             </ListBox>
46             <StackPanel DataContext="{Binding Path=SelectedItem,ElementName=stuList}">
47                 <Label Content="{Binding Name}"></Label>
48                 <Label Content="{Binding Age}"></Label>
49                 <Label Content="{Binding FavorColor}"></Label>
50                 <Label Content="{Binding Hobby}"></Label>
51             </StackPanel>
52         </StackPanel>
53 
54     </Grid>
55 </Window>
View Code


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM