View-ViewModel 간 Binding 시 자료형의 변환이 필요한 경우가 많이 있습니다. ViewModel의 bool 타입이 View의 Visibility속성에 Binding 될 경우가 대표적입니다. 이때 Converter를 사용하여 원하는 동작을 구현할 수 있습니다. 이번 포스팅에서는 bool 타입을 SolidColorBrush (Background 등의 xaml에서 색을 결정하는 Class) 로 변환하는 예제입니다.
✅ BooleanToSolidColorBrushConverter
BooleanToSolidColorBrushConverter.cs
[ValueConversion(typeof(bool), typeof(SolidColorBrush))]
public class BooleanToSolidColorBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (((bool)value) == true)
{
return Brushes.Red;
}
return Brushes.Green;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
SolidColorBrush color = value as SolidColorBrush;
if (color != Brushes.Red)
{
return true;
}
return false;
}
}
ViewModel
private bool _isRed;
public bool IsRed
{
get => _isRed;
set { _isRes = value; OnPropertyChanged(nameof(IsRed)); }
}
xaml
// Resource 등록
<Page.Resources>
<Converter:BooleanToSolidColorBrushConverter x:Key="colorconv"/>
</Page.Resources>
<Button Background="{Binding IsRed, Converter={StaticResource colorconv}}" Content = "Test"/>
ViewModel이 true 일 때는 Red, false 일 때는 Green으로 변환합니다.
응용하면 다양한 Converter를 만드실 수 있습니다.
✅ BooleanToSolidColorBrushConverter - 끝
