Зачем помещать неактивный конвертер в привязку, чтобы изменить его поведение?

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

Элемент управления является расширением ComboBox, который обрабатывает значения определенного пользовательского типа. У него есть свойство зависимости этого пользовательского типа, которое является целевым свойством Binding.

У меня есть оператор трассировки в установщике, и я вижу, что свойство устанавливается. Но это не появляется в моем пользовательском контроле.

Теперь, как правило, я бы сказал, хорошо, у меня есть ошибка в моем пользовательском элементе управления. Я, вероятно, знаю, хотя я озадачен этим. Но этот вопрос не о том, чтобы найти ошибку в моем контроле. Читать дальше; вот где это становится странным.

Я также использую небольшой конвертер значений Bea Stollnitz для отладки Binding:

public class DebuggingConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value; // Add the breakpoint here!!
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException("This method should never be called");
    }
}

Идея заключается в том, что я добавляю этот конвертер в свой Binding и могу установить точку останова, чтобы увидеть, какое значение выдвигается к цели. Хорошо, это работает просто отлично. Я вижу, что значение выталкивается.

На самом деле, это работает немноготоже хорошо. Если DebuggingConverter присоединен к Binding, пользовательский элемент управления отображает значение. Если это не так, это не так.

Как это вообще возможно? Как конвертер значений, который ничего не меняет, влияет на поведение привязанного элемента управления?

Редактировать:

Не то чтобы это могло помочь, но вот XAML для пользовательского элемента управления:

<a:CodeLookupBox
    Grid.Column="1"
    Grid.IsSharedSizeScope="True"
    MinWidth="100"
    Style="{Binding Style}">
    <a:CodeLookupBox.CodeLookupTable>
        <Binding Path="Codes" Mode="OneWay"/>
    </a:CodeLookupBox.CodeLookupTable>
    <a:CodeLookupBox.SelectedCode>
        <Binding Path="Value" Mode="TwoWay" ValidatesOnDataErrors="True"/>
    </a:CodeLookupBox.SelectedCode>
</a:CodeLookupBox>

Без конвертера на второй привязке управление ведет себя так, как будто я не установилSelectedCode, Хотя след в утвержденииOnSelectedCodePropertyChanged обработчик показывает, чтоe.Value действительно содержит правильное значение. Это происходит независимо от того, подключен конвертер или нет.

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

Ответы на вопрос(4)

Ваш ответ на вопрос