не возможно получить значение привязки. Вы не должны даже пытаться сделать это. WPF использует некоторую причудливую рефлексию, чтобы разрешить привязки и довериться мне - вы не захотите попробовать это сами.
Во всяком случае, с учетом этого я и сделал то, что на самом деле было хорошим решением:
Я сделал TranslateConverter
, который позаботился о переводе:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var key = value as string ?? parameter as string;
if (key != null)
{
// Do translation based on the key
}
return null;
}
Тогда в моем TranslateExtension
я просто делаю это:
var binding = Key as Binding ?? new Binding{Mode = BindingMode.OneWay};
binding.Converter = new TranslateConverter(_targetObject, _targetProperty, Dictionary, Converter);
binding.ConverterParameter = Key is Binding ? null : Key as string;
return binding.ProvideValue(serviceProvider);
Таким образом, привязка разрешается WPF и передается преобразователю в качестве значения, тогда как простая текстовая клавиша передается преобразователю в качестве параметра.
_targetObject
и _targetProperty
получены от ServiceProvider.