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>
결과
WPF TextBox 줄바꿈(개행) 처리 (0) | 2024.07.14 |
---|---|
WPF Custom FrameworkElement 사용하기 (0) | 2024.07.10 |
DispatcherObject를 상속받은 WPF의 모든 public 클래스를 트리로 보여주는 프로그램 (0) | 2024.07.10 |
WPF TreeView 를 이용해 파일탐색기 만들기 (0) | 2024.07.10 |
WPF 프로그램 하단에 시계 표시하기 (0) | 2024.07.10 |