2

자식 요소에도 변환기가있는 변환기와 함께 MultiBinding을 사용하려고합니다.TextBox.Text를 설정할 때 IMultiBindingConverter에서 문자열 배열을 가져 오는 이유는 무엇입니까?

XAML 그래서 다음과 같습니다

<TextBlock> 
<TextBlock.Text> 
    <MultiBinding Converter="{StaticResource localizedMessageConverter}" ConverterParameter="{x:Static res:Resources.RecordsFound}" > 
     <Binding Converter="{StaticResource localizedMessageParameterConverter}" ConverterParameter="ALIAS" Path="Alias" Mode="OneWay" /> 
     <Binding Converter="{StaticResource localizedMessageParameterConverter}" ConverterParameter="COUNT" Path="Count" Mode="OneWay" /> 
    </MultiBinding> 
</TextBlock.Text> 

이이 텍스트 속성을 지정하는 TextBlock의 사용 때마다 나는 여기에 직면 해요 문제, 내 IMultiValueConverter 구현은 객체의 컬렉션을 가져옵니다 IValueConverter에 의해 반환 된 클래스 대신 문자열의. ToString() 메서드가 내부 변환기의 결과에 호출되어 IMultiValueConverter에 전달 된 것 같습니다. Label의 Content 속성을 지정하는 데 사용하는 경우 모두 정상입니다.

프레임 워크가 반환 형식이 문자열이 될 것이라고 가정하지만 그 이유는 무엇입니까? TextBlock.Text와 호환되는 결과가 나오기 때문에 MultiBinding에 대해 알 수 있습니다. 그러나 MultiBinding 내부의 Bindings에 대해서도 마찬가지입니다.

내부 바인딩 요소에서 변환기를 제거하면 네이티브 형식이 반환됩니다. 내 경우에는 string과 int.

답변

2

아마도 localizedMessageParameterConverter 변환기의 targetType 매개 변수는 System.String입니다. 이것은 Bindings의 대상 유형이 MultiBinding에서 상속되고 TextBlock.Text가 문자열 속성이기 때문에 MultiBinding의 targetType이 System.String이기 때문입니다.

Multi-Value Converters, Value Converters and the Case of the Wrong Target Type는 마이크로 소프트 연결에 따르면,이 WPF 4.0에서 수정되었습니다 :

비슷한 문제에 대한 다음 문서를 참조하십시오. 참고 : Microsoft Connect

위의 문서에서는 해결 방법에 대해서도 설명합니다.

+0

고맙습니다. 이 기능은 WPF 4.0의 매력처럼 작동합니다. 내 첫 번째 게시물에서 언급했듯이이 라벨을 사용하면 MS Connect에서이 문제에 대해 제안 된 해결 방법 인 라벨도 사용할 수 있습니다. 대상이 String이 아닌 Object이기 때문입니다. – mcohen75

관련 문제