728x90
728x170

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>

 

 

 

 

 

728x90
그리드형

'C# > WPF' 카테고리의 다른 글

[WPF] Style 사용하기  (0) 2020.07.10
[WPF] RelativeSource 를 이용한 바인딩  (0) 2020.07.10
[WPF] Custom FrameworkElement 사용하기  (0) 2020.07.10
[WPF] Binding  (0) 2020.07.09
[WPF] PageFunction  (0) 2020.07.09
Posted by kjun
,