멀티 바인드 내 바인딩 중 하나라도 실패하면 폴백 값을 지정하는 방법을 찾고 있습니다. 여기 다중 바인딩 폴백 값 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;
}
}
그러나 이것은 여전히 내가 MultiConverter에서 설정되지 않은 값을 확인해야한다는 것을 의미합니다. 어떤 코드를 내 모든 변환기에 대한 공통 기본 클래스에 넣을 수있는 큰 문제는 아니지만 이미 완료된 것으로 보이며 잘못 사용한 것입니다. – pastillman
@pastillman 그렇습니다. 변환기에서 모든 수신되는'values [i]'를 "전역 적으로"확인했기 때문에 변환기에서이를 확인해야합니다. 당신이 말했듯이 바인딩 단위로 그것을 할 수 있거나 전혀 유효하지 않은 바인딩을 전달하기를 원하지 않는다면'PriorityBinding'을 사용하십시오. Converter가 null을 리턴하게하는 것은 xaml에서 직접 참조되는 문자열이있는 지역화에 도움이되기 때문에 완벽하게 유효합니다. – Viv