2013-06-03 9 views
2

멀티 바인드 내 바인딩 중 하나라도 실패하면 폴백 값을 지정하는 방법을 찾고 있습니다. 여기 다중 바인딩 폴백 값 unsetvalue에

바인딩 (즉, A 및 B가 올바른 경로이다) 여기서

<MultiBinding Converter="{local:MultiConverter}"> 
    <Binding Path="A"/> 
    <Binding Path="B"/> 
</MultiBinding> 

성공한 경우, 그것은 (고장 'B'경로)

<MultiBinding Converter="{local:MultiConverter}"> 
    <Binding Path="A"/> 
    <Binding Path="Bb"/> 
</MultiBinding> 
실패한 경우이다

이 값은 변환기의 값 [1]에 대해 {DependencyProperty.UnsetValue}의 값으로 전달됩니다.

그러나 불행히도 컨버터는 여전히 unset 값으로 호출됩니다. 난 당신이 내가 원하는 게 아니에요 다음

<MultiBinding Converter="{local:MultiConverter}"> 
    <Binding Path="A"/> 
    <Binding Path="Bb" FallbackValue="Egg"/> 
</MultiBinding> 

을 할 수 있다는 것을 알고 있어요 동안

. 하위 바인딩 중 하나라도 실패하면 전체 멀티 바인딩이 X가되도록 폴백을 지정하고 싶습니다. 각 구성 요소에 대해 대체를 지정하지 않아도됩니다.

현재 다음과 같은 방법을 사용하고 있습니다 ...하지만 변환기가 아닌 멀티 바인딩에 대한 대체 방법을 지정하고 싶습니다.

public class MultiConverter : MarkupExtension, IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values.Any(e => e == DependencyProperty.UnsetValue)) 
     { 
      return "failed!"; 
     } 
     return values[0].ToString() + values[1].ToString(); 
    } 

    public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 
} 

답변

1

은 아마 "failed!"

<MultiBinding Converter="{local:MultiConverter}" TargetNullValue="Failed!"> 
    <Binding Path="A"/> 
    <Binding Path="Bb" /> 
</MultiBinding> 

대신 컨버터에서 당신이 컨버터의 체크를 할이 방법을 null를 반환 할 TargetNullValue를 사용하여 변환 때문에 어떤 바인딩 오류의 당신의 결과의 null를 반환하는 경우 TargetNullvalue

+0

그러나 이것은 여전히 ​​내가 MultiConverter에서 설정되지 않은 값을 확인해야한다는 것을 의미합니다. 어떤 코드를 내 모든 변환기에 대한 공통 기본 클래스에 넣을 수있는 큰 문제는 아니지만 이미 완료된 것으로 보이며 잘못 사용한 것입니다. – pastillman

+0

@pastillman 그렇습니다. 변환기에서 모든 수신되는'values ​​[i]'를 "전역 적으로"확인했기 때문에 변환기에서이를 확인해야합니다. 당신이 말했듯이 바인딩 단위로 그것을 할 수 있거나 전혀 유효하지 않은 바인딩을 전달하기를 원하지 않는다면'PriorityBinding'을 사용하십시오. Converter가 null을 리턴하게하는 것은 xaml에서 직접 참조되는 문자열이있는 지역화에 도움이되기 때문에 완벽하게 유효합니다. – Viv