Necesito determinar el StringFormat
de algún límite TextBlocks
en tiempo de ejecución basado en el sistema de unidad identificado en el objeto a vincular.IValueConverter con Bound Dependency Properties
Tengo un convertidor con una Propiedad de dependencia al cual me gustaría vincularme. El valor Bound se usa para determinar el proceso de conversión.
public class UnitConverter : DependencyObject, IValueConverter
{
public static readonly DependencyProperty IsMetricProperty =
DependencyProperty.Register("IsMetric", typeof(bool), typeof(UnitConverter), new PropertyMetadata(true, ValueChanged));
private static void ValueChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
((UnitConverter)source).IsMetric = (bool)e.NewValue;
}
public bool IsMetric
{
get { return (bool)this.GetValue(IsMetricProperty); }
set { this.SetValue(IsMetricProperty, value); }
}
object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (IsMetric)
return string.Format("{0:0.0}", value);
else
return string.Format("{0:0.000}", value);
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
declaro el convertidor
<my:UnitConverter x:Key="Units" IsMetric="{Binding Path=IsMetric}"/>
y obligar a la TextBlock
<TextBlock Text="{Binding Path=Breadth, Converter={StaticResource Units}}" Style="{StaticResource Values}"/>
Nunca menos, me sale el siguiente error:
System.Windows.Data de error: 2: No se puede encontrar FrameworkElemento o FrameworkContentElement para el elemento de destino. BindingExpression: Path = IsMetric; DataItem = null; el elemento objetivo es 'UnitConverter' (HashCode = 62641008); target property is 'IsMetric' (tipo 'Boolean')
Supongo que esto se inicializa antes de configurar el contexto de datos y, por lo tanto, no hay nada para enlazar la propiedad IsMetric
. ¿Cómo puedo lograr el resultado deseado?
Quería evitar esto ya que tengo cientos de TextBlocks y no quería tener que pasar por ellos y modificarlos todos. –
Gracias, hombre. Sí, me di cuenta de que solo estaba estableciendo la misma propiedad, ¡bueno si alguna vez se llamara así! El MultiBinding funciona bien sin embargo –