KeiStory

WPF IValueConverter 사용하기

 

IValueConverter 는 서로 다른 데이터 타입 사이의 데이터 바인딩을 처리하기 위해 사용하게 됩니다.

ConvertBack 메소드는 Mode 가 Twoway 방식일 때 사용됩니다.

 

실제 값이 숫자라고 할때 바인딩 대상은 문자를 요구할 때 쓰일수 있습니다.

 아래는 double 값을 decimal 값으로 변환하되 인자 값에 따라 소숫점 뒷자리를 잘라내는 코드입니다.

 

DoubleToDecimalConverter.cs

using System;
using System.Globalization;
using System.Windows.Data;
 
namespace WpfApp
{
    [ValueConversion(typeof(double), typeof(decimal))]
    public class DoubleToDecimalConverter : IValueConverter
    {
        /// <summary>
        /// 값을 변환합니다.
        /// </summary>
        /// <param name="value">바인딩 소스에서 생성한 값입니다.</param>
        /// <param name="typeTarget">바인딩 대상 속성의 형식입니다.</param>
        /// <param name="parameter">사용할 변환기 매개 변수입니다.</param>
        /// <param name="culture">변환기에서 사용할 문화권입니다.</param>
        /// <returns>변환된 값입니다. 메서드에서 null을 반환하면 유효한 null 값이 사용됩니다.</returns>
        public object Convert(object value, Type typeTarget, object parameter, CultureInfo culture)
        {
            decimal num = new Decimal((double)value);
            if (parameter != null)
            {
                num = Decimal.Round(num, Int32.Parse(parameter as string));
            }
            return num;
        }
 
        /// <summary>
        /// 값을 변환합니다.
        /// </summary>
        /// <param name="value">바인딩 소스에서 생성한 값입니다.</param>
        /// <param name="typeTarget">바인딩 대상 속성의 형식입니다.</param>
        /// <param name="parameter">사용할 변환기 매개 변수입니다.</param>
        /// <param name="culture">변환기에서 사용할 문화권입니다.</param>
        /// <returns>변환된 값입니다. 메서드에서 null을 반환하면 유효한 null 값이 사용됩니다.</returns>
        public object ConvertBack(object value, Type typeTarget, object parameter, CultureInfo culture)
        {
            return Decimal.ToDouble((decimal)value);
        }
    }
}

MainWindow.xaml

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:src="clr-namespace:WpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <src:DoubleToDecimalConverter x:Key="converter" />
    </Window.Resources>
    <StackPanel>
        <ScrollBar
             Name="scroll"
             Orientation="Horizontal"
             Margin="24"
             Maximum="100"
             LargeChange="10"
             SmallChange="1" />
        <Label
             HorizontalAlignment="Center"
             Content="{Binding ElementName=scroll, Path=Value, Mode=OneWay, Converter={StaticResource converter}, ConverterParameter=2}" />
    </StackPanel>
  </Window>

 결과

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band