키를 기반으로 문자열을 번역 할 때 마크 업 확장을 만들었습니다. 예MarkupExtension 내부의 데이터 바인딩 값을 어떻게 해결합니까?
<TextBlock Text="{Translate myKey}" />
이제 내 키를 제공하기 위해 중첩 된 바인딩을 사용할 수 있기를 원합니다. 예 : 나는이 작업을 수행 할 때
<TextBlock Text="{Translate {Binding KeyFromDataContext}}" />
은 내가 System.Windows.Data.Binding 객체를 얻는다. ServiceProvider을 ProvideValue를 호출하고 아래로 통과함으로써 나는 BindingExpression 얻을 수 있습니다 :
var binding = Key as Binding;
if (binding == null) {
return null;
}
var bindingExpression = binding.ProvideValue(_serviceProvider) as BindingExpression;
if (bindingExpression == null) {
return null;
}
var bindingKey = bindingExpression.DataItem;
나는이 bindingExpression을 얻을 수 있지만,있는 DataItem 속성은 null입니다. 나는 이와 같은 제 바인딩을 테스트했습니다.
<TextBlock Text="{Binding KeyFromDataContext}" />
그리고 제대로 작동합니다.
아이디어가 있으십니까?
바인딩 값이 변경되면 ProvideValue가 다시 호출되지 않습니다. 이것에 대한 해결책이 있습니까? – Haytam
@Haitam 질문은 바인딩의 가치를 해결하는 것이 었습니다. 변경 될 수 있다고 생각되면 대신 'Value'에 바인드하고 변환기를 사용하는 다른 바인딩을 반환 할 수 있습니다. – torvin
첨부 된 건물의 작동 방식을 설명해 주시겠습니까? 나는 항상'target.GetValue()'에서'null '을 얻고있다. ... – spacer