정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

IValueConverter 인터페이스

2013-12-13

바인딩 엔진을 통과할 때 데이터 수정을 가능하게 하는 메서드를 노출합니다.

Namespace:  System.Windows.Data
어셈블리:  System.Windows(System.Windows.dll)

public interface IValueConverter

IValueConverter 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드Convert소스 데이터를 UI에 표시하기 위해 대상에 전달하기 전에 수정합니다.
Public 메서드ConvertBack대상 데이터를 소스 개체에 전달하기 전에 수정합니다. 이 메서드는 TwoWay 바인딩에서만 호출됩니다.
맨 위

IValueConverter에서 상속하여 데이터 형식을 소스와 대상 간에 변환할 수 있는 클래스를 만들 수 있습니다. 예를 들어 RGBA 값으로 저장하지만 UI에는 색상 이름으로 표시하는 색상 목록을 원할 수 있습니다. ConvertConvertBack을 구현하면 바인딩 엔진에 의해 대상과 소스 간에 데이터 값이 전달될 때 이들 값의 형식을 변경할 수 있습니다.

다음 예제에서는 IValueConverter 인터페이스를 구현한 후 이 변환기를 사용하여 개체 컬렉션에 데이터를 바인딩하는 방법을 보여 줍니다.


<phone:PhoneApplicationPage x:Class="ConverterParameterEx.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:local="clr-namespace:ConverterParameterEx"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    mc:Ignorable="d" d:DesignHeight="800" d:DesignWidth="480">
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.Resources>
           <local:DateFormatter x:Key="FormatConverter" />
        </Grid.Resources>

        <ComboBox Height="60" Width="200" x:Name="MusicCombo" 
            ItemsSource="{Binding}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock FontWeight="Bold" Text="{Binding Path=Name, Mode=OneWay}" />
                        <TextBlock Text="{Binding Path=Artist, Mode=OneWay}" />
                        <TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay,
                        Converter={StaticResource FormatConverter}, 
                        ConverterParameter=\{0:d\}}" />
                   </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </Grid>
</phone:PhoneApplicationPage>



using System;
using System.Collections.ObjectModel;
using System.Windows.Controls;
using System.Windows.Data;
using Microsoft.Phone.Controls;

namespace ConverterParameterEx
{
    public partial class Page : PhoneApplicationPage
    {

        public ObservableCollection<Recording> MyMusic =
            new ObservableCollection<Recording>();

        public Page()
        {
            InitializeComponent();

            // Add items to the collection.
            MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live",
                new DateTime(2008, 2, 5)));
            MyMusic.Add(new Recording("Luka Abrus",
                "The Road to Redmond", new DateTime(2007, 4, 3)));
            MyMusic.Add(new Recording("Jim Hance",
                "The Best of Jim Hance", new DateTime(2007, 2, 6)));

            // Set the data context for the combo box.
            MusicCombo.DataContext = MyMusic;
        }
    }

    // Simple business object.
    public class Recording
    {
        public Recording() { }

        public Recording(string artistName, string cdName, DateTime release)
        {
            Artist = artistName;
            Name = cdName;
            ReleaseDate = release;
        }

        public string Artist { get; set; }
        public string Name { get; set; }
        public DateTime ReleaseDate { get; set; }
    }

    public class DateFormatter : IValueConverter
    {
        // This converts the DateTime object to the string to display.
        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            // Retrieve the format string and use it to format the value.
            string formatString = parameter as string;

            if (!string.IsNullOrEmpty(formatString))
            {
                return string.Format(culture, formatString, value);

            }

            // If the format string is null or empty, simply call ToString()
            // on the value.
            return value.ToString();
        }

        // No need to implement converting back on a one-way binding 
        public object ConvertBack(object value, Type targetType, 
            object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시: