He creado una extensión de marcado para traducir cadenas basadas en una clave. Ejemplo¿Cómo puedo resolver el valor de un enlace de datos dentro de una extensión de marca?
<TextBlock Text="{Translate myKey}" />
Ahora quiero poder utilizar enlaces anidados para proporcionar mis claves. Ejemplo:
<TextBlock Text="{Translate {Binding KeyFromDataContext}}" />
Cuando hago esto, obtengo un objeto System.Windows.Data.Binding. Llamando ProvideValue y que pasa por el Proveedor del Servicio puedo conseguir un 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;
puedo conseguir este BindingExpression, pero la propiedad DataItem es nulo. He probado mi enlace como este
<TextBlock Text="{Binding KeyFromDataContext}" />
y funciona bien.
¿Alguna idea?
¿Qué pasa si el valor de enlace cambia, ProvideValue no se vuelve a llamar, correcto? ¿Hay alguna solución para esto? – Haytam
@Haitam, la pregunta era sobre la resolución del valor del enlace. Si sospecha que podría cambiar, puede devolver otro enlace que se una a 'Valor' y use un convertidor. – torvin
¿Puede explicarnos cómo funciona la propiedad adjunta? Siempre obtengo 'null' de' target.GetValue() '... – spacer