프로그래밍/WPF

[WPF] Value Converter

흔한티벳여우 2021. 5. 10. 17:59
반응형

바인딩 처리를 하다보면 값에 따라 화면에 바인딩 되어야하는 값이 달라야 할때가 있다.

예를들어 bool 값을 이용하여 visible처리 할 때나, 퍼센트 값에 따라 폰트 컬러가 달라진다거나 하는 기타 등등의 요소가 존재한다.

이를 위한 Value Converter 사용법은 아래와 같다.

 

ViewModel에 컨버터 클래스를 선언한다.

    public abstract class BaseOnewayConverter : MarkupExtension, IValueConverter
    {
        public BaseOnewayConverter() { }
        // source to binding target
        public abstract object Convert(object value, Type targetType,
                               object parameter, CultureInfo culture);
        // binding target to source
        public object ConvertBack(object value, Type targetType,
                      object parameter, CultureInfo culture)
        {
            return new NotImplementedException();
        }
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }
    public class BoolToVisibilityConverter : BaseOnewayConverte/
    {
        public override object Convert(object value, Type targetType, object  parameter, CultureInfo culture)
        {
            return (bool)value ? Visibility.Visible : Visibility.Collapsed;
        }
    }

사용하는 화면에 리소스로 등록해준다.

<Window.Resources> 
	<vm:BoolToVisibilityConverter x:Key="Converter"/> 
</Window.Resources>

원하는 컨트롤에 바인딩한다.

<Button Focusable="False"
	x:Name="ButtonOpenMenu"
	Height="60"  Width="60"
	VerticalAlignment="Bottom"
	Visibility="{Binding ElementName=ButtonCloseMenu,  Path=IsPressed, Converter={converter:BoolToVisibilityConverter}}"
	Background="{x:Null}"  BorderBrush="{x:Null}"/>

 

반응형