18장. WPF IValueConverter를 이용한 데이터바인딩, DataType이 다른 경우의 Data Binding
- C#/WPF
- 2021. 5. 15. 18:33
18장. WPF IValueConverter를 이용한 데이터바인딩, DataType이 다른 경우의 Data Binding
참조
목적
- WPF IValueConverter 를 이용하여 데이터바인딩을 해봅니다.
IValueConverter 를 이용한 데이터바인딩
- 데이터바인딩시 소스와 타겟의 데이터 타입이 다른 경우가 있는데, 예를 들면 체크박스의 체크여부에 다라 "예", "아니오" 등을 표시하는 경우 들이 있습니다.
- 데이터바인딩시 타입의 변경을 위해서 IValueConverter를 사용하며 IValueConverter 인터페이스를 구현하는 클래스가 소스와 타겟 사이의 값을 변환 합니다.
- WPF Value Converter는 IValueConverter 인터페이스 또는 IMultiValueConverter 인터페이스를 구현해야 하며 Convert() 및 ConvertBack()의 두 가지 메서드만 구현하면 됩니다.
- 문자열을 입력으로 불리언(Bollean) 값을 반환하는 간단한 변환기를 구현해 보겠습니다.
실습
MainWindow.xaml
<Window x:Class="WPF16_Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF16_Test"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="400">
<Window.Resources>
<local:YesNoToBoolConverter x:Key="converter"/>
</Window.Resources>
<StackPanel>
<TextBox x:Name="textBox"
Text="YES"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Current Value : "/>
<TextBlock x:Name="tb_Check"
Text="{Binding ElementName=textBox,
Path=Text,
Converter={StaticResource converter}}"/>
</StackPanel>
<CheckBox Content="{Binding Path=Text, ElementName=textBox}"
IsChecked="{Binding Path=Text, ElementName=textBox,
Converter={StaticResource converter}}"/>
</StackPanel>
</Window>
YesNoToBoolConverter.cs
using System;
using System.Globalization;
using System.Windows.Data;
namespace WPF16_Test
{
public class YesNoToBoolConverter : IValueConverter
{
/// <summary>
/// 소스값이 타겟에 바인딩 되는 경우 호출
/// TextBox -> TextBlock, TextBox -> CheckBox
/// TextBox의 Text 속성이 값 "YES", "NO" 에 따라 true, false, 를 리턴
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (value.ToString().ToUpper())
{
case "YES": return true;
case "NO": return false;
}
return false;
}
/// <summary>
/// 타겟값이 역으로 소스에 바인딩 될 때 호출
/// CheckBox -> TextBox
/// CheckBox의 값 true, false 에 따라 "YES", "NO" 문자열을 리턴
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
{
if ((bool)value == true)
return "YES";
else
return "NO";
}
return "NO";
}
}
}
실행 결과
728x90
'C# > WPF' 카테고리의 다른 글
20장. WPF 계산기, MVVM, Command, 데이터바인딩이용 (2) | 2021.05.17 |
---|---|
19장. WPF MVVM, ListBox의 컬렉션 정렬, 필터링, 탐색 실습(ListCollectionView) (0) | 2021.05.17 |
14장. WPF Command패턴, 데이터바인딩 DataBinding 개요, 실습 (2) | 2021.05.14 |
13장. WPF 데이터바인딩 실습, INotifyPropertyChanged, PropertyChanged 이용 (0) | 2021.05.13 |
12장. WPF DataContext를 이용한 데이터바인딩 실습 (0) | 2021.05.13 |
이 글을 공유하기