Converter란?
어떤 데이터를 View에 보여질 때만 변경시켜서 보여지게 하는 것
예) true, false 값을 View 화면에서는 "남자", "여자"로 보여지게만 하고 값은 true, false 그대로 남아있음
Converter는 IValueConverter라는 인터페이스를 상속해야 xaml에서 바인딩시 Converter를 사용할 수 있음
1.Converter 만들기
관리 용이하게 Converters라는 폴더 최상위에 만들고 BoolToGender.cs 파일 안에 생성함
접근제한자를 public으로 바꾸고 IValueConverter 인터페이스를 상속하면 오류 뜨는데,
인터페이스를 구현하도록 해주지 않았기 때문
오류 없애주기 위해 메소드 Overloading 해줌
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace MyFirstWPFApp.Converters
{
public class BoolToGender : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Convert 메소드 : ViewModel에서 View로 갈 때 사용
ConvertBack : View에서 ViewModel로 갈 때 사용됨
true, false "남자", "여자"로 변환하니 Convert 메소드 아래와 같이 코딩
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is not bool boolean)
return DependencyProperty.UnsetValue;
return boolean ? "남자" : "여자";
}
DependencyProperty.UnsetValue : 바인딩 시 값이 잘못된 값일 때 반환값 설정이 되어있다면, 설정된 값으로 반환시키는 역할
예) 잘못된 값일 때 false로 지정하고 DependencyProperty.UnsetValue로 반환시, false값 나옴
2.Converter 연동
MainWindow.xaml 돌아가서 먼저 Window Resource에 컨버터 등록
<Window
x:Class="MyFirstWPFApp.Views.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:local="clr-namespace:MyFirstWPFApp.Views"
xmlns:c="clr-namespace:MyFirstWPFApp.Converters"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Window.Resources>
<c:BoolToGender x:Key="BoolToGender" />
</Window.Resources>
...
...
...
</StackPanel>
</Window>
주의) 반드시 해당 컨버터가 있는 폴더를 네임스페이스로 등록시켜줘야 함
xmlns:c="clr-namespace:MyFirstWPFApp.Converters"
그리고 변환 필요한 곳에 Converter 연동
<ComboBox
...
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource BoolToGender}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
...
...
<StackPanel Grid.Row="1" Orientation="Horizontal">
...
<TextBlock Margin="5" Text="{Binding SelectedPerson.Gender, Converter={StaticResource BoolToGender}}" />
</StackPanel>
연동 완료
3.프로그램 실행
출처) 괴발자 데브봉
'WPF' 카테고리의 다른 글
[WPF] MVVM 패턴으로 WPF 시작하기 - 04 Textbox와 ComboBox (0) | 2024.05.14 |
---|---|
[WPF] MVVM 패턴으로 WPF 시작하기 - 03 ViewModel (0) | 2024.05.14 |
[WPF] MVVM 패턴으로 WPF 시작하기 - 02 UI 구성(Grid, ListView, StackPanel) (0) | 2024.05.14 |
[WPF] MVVM 패턴으로 WPF 시작하기 - 01 프로젝트 만들기 (0) | 2024.05.14 |