2014-02-27 1 views
0

StringFormat을 TextBox에 다중 바인딩하는 두 개의 문자열을 바인딩합니다. 은 TargetType 속성이 객체 될 것입니다 컨버터에서StringFormat을 사용한 다중 바인딩 - 왜 innerType 변환기에 targetType == 객체가 있습니까?

<TextBox> 
    <TextBox.Text> 
     <MultiBinding StringFormat="{}{0} {1} "> 
      <Binding Path="Foo" 
         Converter="{StaticResource someConverter}" 
         ConverterParameter="true" /> 
      <Binding Path="Bar" /> 
     </MultiBinding> 
    </TextBox.Text> 
</TextBox> 

:이 같은 내부 바인딩 중 하나에 변환기를 추가 할 때 나는 뭔가 이상한 나타났습니다. 동일한 변환기를 Text 속성 (multibinding없이)에 직접 사용하면 문자열이됩니다. 일이 일어나고 있다는 이유

나는 을 궁금하고있는 경우 (용어 여기에 맞는지 확실하지) 컨버터를시키기의 방법이 결합 부모의 종류에 대해 알고.

내가 묻는 이유는 변환기에서/from 형식을 일반적으로 확인하고 불일치가 있으면 Binding.DoNothing을 반환한다는 것입니다. 당신이 텍스트 속성에 직접 someConverter를 사용하는 경우이 텍스트 속성의 유형을 기반으로하기 때문에

답변

2

은 TargetType문자열 될 것입니다. 그러나 MultiBinding 내부에있는 Binding에서 변환기를 사용하면 TargetType에 대한 정보가없고 개체이 기본적으로 사용됩니다.

은 아마 당신은 IMultiValueConverter을 잘 알고있는, 그래서 당신이 그것을 사용할 때 은 TargetType문자열 예상대로 될 것입니다. 예를보세요 :

<TextBox> 
    <TextBox.Text> 
    <MultiBinding StringFormat="{}{0} {1} " Converter="{StaticResource someMultiConverter}" ConverterParameter="true" > 
     <Binding Path="Foo" /> 
     <Binding Path="Bar" /> 
    </MultiBinding> 
    </TextBox.Text> 
</TextBox> 
+0

답변 해 주셔서 감사합니다! 내부 바인딩은 Text의 직접적인 자식이 아니라 MultiBinding의 것이지만 StringFormat을 사용하면 문자열을 기대한다고 가정했을 것입니다. 이제 당신이 제안하는 것은 받아 들일 수있는 해결 방법입니다 (변환기의 형식 유효성 검사에 대해 매우 까다로울 필요는 없지만). 동일한 작업을 위해 기존 변환기 (현재 다중 값 포함)를 복제해야합니다. – pangabiMC

관련 문제