有时我们展现的数据,需要进行转换,比如如果一个学生的成绩过了60,我们显示一个Pass的图片。

XAML:

<Window x:Class="DeepXAML.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:DeepXAML"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="250" Width="450">
<Window.Resources>
         <local:ScoreToImageConverter x:Key="sti"></local:ScoreToImageConverter>
</Window.Resources>
<StackPanel>
<ListBox x:Name="listBoxStudents" Margin="10">
<ListBox.ItemTemplate>
                 <DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}"></TextBlock>
                         <Image Source="{Binding Path=Score,Converter={StaticResource sti}}" Height="20"></Image>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
 </Window>

后台代码:

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
 namespace DeepXAML

 {
public partial class MainWindow : Window
{
public MainWindow()
         {
InitializeComponent();
             List<Student> students = new List<Student>{
              new Student{ Name="Jack", Score=90},
               new Student{Name="Tom", Score=30},
               new Student{ Name="David", Score=80}
             };
             this.listBoxStudents.ItemsSource = students;
         }

     }
     public class Student
     {
public string Name { get; set; }
         public double Score { get; set; }
}
     public class ScoreToImageConverter : IValueConverter
     {
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
double score = (double)value;
             return score >= 60 ? @"\images\pass.gif" : @"\images\nopass.gif";
         }

         public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
             throw new NotImplementedException();
}
     }
}