수색…
매개 변수
| 매개 변수 | 세부 |
|---|---|
| 값 | 변환 할 값 |
| targetType | 변환 대상 유형 |
| 매개 변수 | 변환 작동 방식을 제어하는 선택적 값 |
| 문화 | CultureInfo 객체 - 필요한 현지화가 필요한 경우 |
비고
Convert 메서드는 소스 (일반적으로 뷰 모델)의 값을 대상 (일반적으로 컨트롤의 속성)으로 변환합니다.
ConvertBack 메서드는 대상의 값을 원본으로 다시 변환합니다. Y 인딩이 TwoWay 또는 OneWayToSource 경우에만 필요합니다.
ConvertBack 이 지원되지 않는 경우, 즉 변환 전 값과 변환 후 값 사이에 일대일 매핑이 없으면 ConvertBack 메서드에서 DependencyProperty.UnsetValue 반환하는 것이 일반적입니다. 그것은 예기치 않은 런타임 오류를 피하기 때문에 예외 (예 : NotImplementedException )를 던지는 것보다 더 나은 옵션입니다. 또한 DependencyProperty.UnsetValue 가 변환기에 의해 반환 될 때 바인딩은 FallbackValue 이점을 얻을 수 있습니다.
IsChecked 변환기의 문자열
XAML에서
<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
Converter={StaticResource StringToIsCheckedConverter},
ConverterParameter=Male}"
Content="Male"/>
<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
Converter={StaticResource StringToIsCheckedConverter},
ConverterParameter=Female}"
Content="Female"/>
C # 클래스 :
public class StringToIsCheckedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = (string)value;
string test = (string)parameter;
return input == test;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || !(value is bool))
{
return string.Empty;
}
if (parameter == null || !(parameter is string))
{
return string.Empty;
}
if ((bool)value)
{
return parameter.ToString();
}
else
{
return string.Empty;
}
}
}
변환기 101
XAML 컨트롤에는 DataContext 또는 다른 컨트롤의 개체에 바인딩 할 수있는 종속성 속성이있을 수 있습니다. 바인딩되는 개체의 유형이 대상 DependencyProperty 의 유형과 다른 경우 변환기를 사용하여 한 유형을 다른 유형에 적용 할 수 있습니다.
변환기는 System.Windows.Data.IValueConverter 또는 System.Windows.Data.IMultiValueConverter 구현하는 클래스입니다. WPF는 기본적으로 일부 변환기를 구현하지만 개발자는 사용자 지정 구현에서 사용 방법을 볼 수 있습니다.
XAML에서 변환기를 사용하려면 Resources 섹션에서 인스턴스를 인스턴스화 할 수 있습니다. 아래 예제에서는 System.Windows.Controls.BooleanToVisibilityConverter 가 사용됩니다.
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
정의 된 x:Key 요소를 BooleanToVisibilityConverter 다음 바인딩의 BooleanToVisibilityConverter 인스턴스를 참조하는 데 사용됩니다.
<TextBlock Text="This will be hidden if property 'IsVisible' is true"
Visibility="{Binding IsVisible,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
위의 예제에서 부울 IsVisible 속성은 System.Windows.Visibility 열거 형의 값으로 변환됩니다. Visibility.Visible true이면 true이고 그렇지 않으면 Visibility.Collapsed 입니다.
변환기 만들기 및 사용 : BooleanToVisibilityConverter 및 InvertibleBooleanToVisibilityConverter
바인딩 경험을 확장하고 확장하기 위해 하나의 유형 값을 다른 유형의 다른 값으로 변환하는 변환기가 있습니다. 데이터 바인딩에서 변환기를 활용하려면 먼저 DataConverter 클래스를 만들어야합니다.
-
IValueConverter(WPF 및 UWP)
또는
-
IMultiValueConverter(WPF)
여러 유형을 하나의 유형으로 변환하려는 경우
이 경우 boolean True/False 값을 해당 Visibilities Visibility.Visible 및 Visibility.Collapsed 로 변환하는 데 초점을 맞 춥니 다.
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return (value is bool && (bool) value) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (value is Visibility && (Visibility) value == Visibility.Visible);
}
}
Convert 당신이 할 때마다 메소드가 불려 GET 데이터 FROM ViewModel .
ConvertBack 시이라고 SET 데이터를 보내고 TO ViewModel 위한 BindingMode.TwoWay 바인딩.
public class InvertibleBooleanToVisibilityConverter : IValueConverter
{
public bool Invert { get; set; } = false;
public object Convert(object value, Type targetType, object parameter, string language)
{
return (value is bool && (bool) value != Invert) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (value is Visibility && ((Visibility) value == Visibility.Visible) != Invert);
}
}
Binding 에서 변환기를 사용하려면 페이지, 창 또는 기타 요소에서 리소스로 선언하고 키를 지정하고 잠재적으로 필요한 속성을 제공하십시오.
<Page ...
xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
<converters:InvertibleBooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
Invert="False" />
</Page.Resources>
바인딩에서 StaticResource 로 사용합니다.
<ProgressRing
Visibility="{Binding ShowBusyIndicator,
Converter={StaticResource BooleanToVisibilityConverter},
UpdateSourceTrigger=PropertyChanged,
Mode=OneWay}" />