WPF Value Converter - 변환할 수 없는 값의 표준 반환
지난 1년 정도 동안 저는 다양한 저자의 다양한 목적을 위한 다양한 가치 변환기를 봐왔습니다.한 가지 눈에 띄는 것은 디폴트(채무불이행) 가치의 큰 차이입니다.예를 들어,
public class MyConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
// OK, we test for some undesirable, unconvertable situation, typically null...
if (value == null)
{
// And here are a variety of 'defaults' that I have seen, these begin the most typical.
return null;
return DependencyProperty.UnsetValue;
return Binding.DoNothing;
}
//...... other code.. whatever...
}}
즉, 입력값을 변환할 수 없음을 나타내는 '표준' 방법이 있습니까?
데이터 바인딩 엔진은 사용자 제공 컨버터에 의해 발생하는 예외를 탐지하지 않습니다.Convert 메서드에 의해 발생하는 예외 또는 Convert 메서드에 의해 호출되는 메서드에 의해 발생하는 수집되지 않은 예외는 런타임오류로 간주됩니다.DependencyProperty를 반환하여 예상되는 문제를 처리합니다.Unset Value(값 설정 해제)
키 행은 DependencyProperty를 반환하여 예상되는 문제 처리입니다.Unset Value(값 설정 해제)
이러한 값을 찾아보면 그 의미를 알 수 있습니다.그러면 컨버터로 돌아가기에 적합한 것을 고르십시오.
주요 문제는 null이 속성의 유효한 값일 수 있다는 것입니다.
Dependency Property.속성이 존재하지만 속성 시스템에서 해당 값을 설정하지 않았음을 나타내는 UnsetValue
바인딩.DoNothing은 바인딩 엔진에 값을 바인딩 대상으로 전송하지 않도록 지시하거나 PriorityBinding의 다음 바인딩으로 이동하지 않도록 지시하거나 FallBackValue 또는 기본값을 사용하지 않도록 지시합니다.
편집
값을 변환할 수 없음을 나타내려면 지정된 값을 반환하기만 하면 됩니다.이것이 바인딩 작성자에게 문제를 반환하기 때문에 가능한 최선의 방법입니다.당신이 그 가치에 개입하면 무슨 일이 일어나고 있는지 알아내기가 매우 어려워진다.
심사숙고 끝에 Dependency Property가 된 것 같습니다.UnsetValue가 적절한 선택입니다.나는 사내의 모든 것을 이 패턴으로 옮겨 큰 성공을 거두었다.또한 이 페이지의 '비고' 섹션의 텍스트는 이것이 최선의 선택임을 나타냅니다.
바인딩을 변환할 수 없는 경우 입력값을 반환하는 것에 대한 논의도 있지만, 이는 바인딩 시스템을 쉽게 "끊을" 수 있습니다.바인딩 입력이 '문자열'이고 출력이 '브러시'인 경우를 생각해 보십시오.문자열을 반환하는 것은 작동하지 않습니다!
디폴트로 되돌리는 것은 상황에 따라 다릅니다.변환기의 기본값으로 int를 bool로 반환하거나 가시성 열거용 변환기의 bool을 반환하지 않을 수 있습니다.
보통 값을 변환할 수 없는 경우, 저는 이 값을Exception
이는 비활성 변환기를 사용하여 값을 변환하려고 할 때 코드를 변경할 수 있도록 경고를 받고 싶기 때문입니다.
드물게 변환이 불가능한 경우에도 값이 유효할 수 있으며, 이 경우 보통 변환기에 전달된 값과 동일한 값을 반환합니다.가능한 경우 값을 변환하고, 그렇지 않은 경우 값을 동일하게 유지하려는 경우에만 사용됩니다.
디폴트값을 하드코딩하는 경우도 있습니다.이것은 보통 Converter가 비활성 파라미터와 함께 사용될 수 있다는 것을 알고 결과에 관계없이 유효한 값을 반환하고 싶을 때 수행됩니다.하드코드된 디폴트컨버터는 거의 항상 부울값을 반환합니다.
지정하신 3개 중 어느 것도 반품한 적이 없는 것 같습니다.null
,DependencyProperty.UnsetValue
, 또는Binding.DoNothing
)는, 이러한 값은 예기치 않은 경우가 많아, 특별히 찾지 않는 한, 알기 어려운 경우가 많기 때문입니다.
진짜를 돌려줄 수도 있어targetType
다음 함수를 사용하여 기본 개체를 지정합니다.
public static object GetDefault(Type type)
{
if(type.IsValueType)
{
return Activator.CreateInstance(type);
}
return null;
}
출처 : C# - 디폴트와 동등한 프로그램(타입)
언급URL : https://stackoverflow.com/questions/5992769/wpf-valueconverter-standard-return-for-unconvertible-value
'programing' 카테고리의 다른 글
XAML DataGridColumn을 DataGrid 전체로 채우려면 어떻게 해야 합니까? (0) | 2023.04.16 |
---|---|
인터랙티브 프로그램으로 비인터랙티브하게 인수 전달 (0) | 2023.04.16 |
SQL에서 랜덤 행을 요청하는 방법 (0) | 2023.04.16 |
* 경유로 숨김 파일을 포함한 모든 파일을 부모 디렉토리로 이동하는 방법 (0) | 2023.04.16 |
목표 C의 상수 (0) | 2023.04.16 |