IValueConverter со связанными свойствами зависимостей

Мне нужно определить StringFormatнекоторую привязку TextBlocksво время выполнения на основе системы единиц, идентифицированной в объекте, который нужно привязать.

У меня есть преобразователь со свойством зависимости, к которому я хочу привязаться. Значение Bound используется при определении процесса преобразования.

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();
    }
}

Я объявляю преобразователь

<my:UnitConverter x:Key="Units" IsMetric="{Binding Path=IsMetric}"/>

и связываю TextBlock

<TextBlock Text="{Binding Path=Breadth, Converter={StaticResource Units}}" Style="{StaticResource Values}"/>

Тем не менее, я получаю следующую ошибку:

System.Windows.Data Error:2 :Не удается найти управляющий FrameworkElement или FrameworkContentElement для цели элемент. BindingExpression:Path=IsMetric; Элемент данных = ноль; целевой элемент — «UnitConverter» (HashCode=62641008); целевое свойство 'IsMetric' (type 'Boolean')

Я предполагаю, что это инициализируется до того, как я устанавливаю контекст данных, и поэтому не к чему привязывать свойство IsMetric. Как я могу добиться желаемого результата?

9
задан Yael 10 February 2017 в 14:56
поделиться