くだらない話のないWPFシリーズ11:データ変換

3275 ワード

ある学生の成績が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
opass.gif"; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } }

 
実行結果
image