허용 된 답변을 더 단순화 할 수 있습니다. 열거 형을 xaml에 문자열로 입력하고 필요한 것보다 변환기에서 더 많은 작업을 수행하는 대신 문자열 표현 대신 열거 형 값을 명시 적으로 전달할 수 있으며 CrimsonX가 언급 한대로 런타임이 아닌 컴파일 타임에 오류가 발생합니다.
ConverterParameter = {x : 정적 로컬 : YourEnumType.Enum1}
<StackPanel>
<StackPanel.Resources>
<local:ComparisonConverter x:Key="ComparisonConverter" />
</StackPanel.Resources>
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource ComparisonConverter}, ConverterParameter={x:Static local:YourEnumType.Enum1}}" />
<RadioButton IsChecked="{Binding Path=YourEnumProperty, Converter={StaticResource ComparisonConverter}, ConverterParameter={x:Static local:YourEnumType.Enum2}}" />
</StackPanel>
그런 다음 변환기를 단순화하십시오.
public class ComparisonConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value?.Equals(parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value?.Equals(true) == true ? parameter : Binding.DoNothing;
}
}
편집 (12 월 16 일 10 일) :
DependencyProperty.UnsetValue 대신 Binding.DoNothing을 반환하도록 제안한 anon에게 감사드립니다.
참고-동일한 컨테이너에있는 여러 개의 RadioButton 그룹 (Feb 17 '11) :
xaml에서 단일 선택 단추가 동일한 상위 컨테이너를 공유하는 경우 하나를 선택하면 다른 특성에 바인드되어 있어도 해당 컨테이너 내의 다른 모든 컨테이너가 선택 해제됩니다. 따라서 공통 속성에 바인딩 된 RadioButton을 스택 패널과 같은 자체 컨테이너에 그룹화하십시오. 관련 RadioButton이 단일 상위 컨테이너를 공유 할 수없는 경우 각 RadioButton의 GroupName 속성을 공통 값으로 설정하여 논리적으로 그룹화하십시오.
편집 (Apr 5 '11) :
삼항 연산자를 사용하기 위해 단순화 된 ConvertBack의 if-else입니다.
참고-클래스에 중첩 된 열거 형 유형 (Apr 28 '11) :
열거 형 유형이 네임 스페이스에 직접 포함되지 않고 클래스에 중첩 된 경우 '+'구문을 사용하여 XAML의 열거 형에 액세스하여 질문에 대한 (표시되지 않음) 답변에 나와있는 것처럼 답변
을 찾을 수 없습니다 WPF에서 정적 참조를위한 열거 형 :
ConverterParameter = {x : 정적 로컬 : YourClass + YourNestedEnumType.Enum1}
그러나이 Microsoft Connect 문제 로 인해 VS2010의 디자이너는 더 이상 상태를로드 "Type 'local:YourClass+YourNestedEnumType' was not found."
하지 않지만 프로젝트는 성공적으로 컴파일 및 실행됩니다. 물론 열거 형을 네임 스페이스로 직접 이동할 수 있다면이 문제를 피할 수 있습니다.
편집 (Jan 27 '12) :
Enum 플래그를 사용하는 경우 변환기는 다음과 같습니다.
public class EnumToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((Enum)value).HasFlag((Enum)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value.Equals(true) ? parameter : Binding.DoNothing;
}
}
편집 (5 월 7 일 '15 일) :
(하는 null 허용 열거의 경우
하지 질문에 물었지만, 예를 들어, ORM DB에서 널 (null)을 반환하거나 때마다 프로그램 로직에 값이 제공되지 않는 것을 적합 할 수 있습니다, 경우에 따라 필요할 수 있습니다), 추가 기억 Convert 메서드에서 초기 null을 확인하고 적절한 부울 값을 반환합니다. 일반적으로 아래와 같이 false입니다 (라디오 버튼을 선택하지 않으려는 경우).
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) {
return false; // or return parameter.Equals(YourEnumType.SomeDefaultValue);
}
return value.Equals(parameter);
}
참고-NullReferenceException (10 월 10 일 '18) :
NullReferenceException 발생 가능성을 제거하도록 예제를 업데이트했습니다.
IsChecked
nullable 형식이므로 반환
Nullable<Boolean>
하는 것이 합리적인 해결책 인 것 같습니다.