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>
|
'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 |