キーに基づいて文字列を変換するためのマークアップ拡張機能を作成しました。例
<TextBlock Text="{Translate myKey}" />
ここで、キーを提供するためにネストされたバインディングを使用できるようにしたいと考えています。例:
<TextBlock Text="{Translate {Binding KeyFromDataContext}}" />
これを行うと、System.Windows.Data.Binding オブジェクトを取得します。ProviderValue を呼び出して ServiceProvider を渡すことで、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}" />
そしてそれはうまくいきます。
何か案は?