Вот еще шесть вещей, которые нужно попробовать:
Найдите в своем приложении все места, где вы непосредственно назначаете свойство Document TextEditor.Похоже, какой-то код где-то делает avalonEdit.Document = ...
, который перезаписывает привязку.Я бы искал во всем вашем приложении строки целого слова "Document" и "DocumentProperty" в регистре совпадений и каждый раз задумывался, не может ли он установить это свойство.
Установить точку останова в TextEditor.OnDocumentChanged, чтобы увидеть, правильно ли привязан документ, а затем изменен позже.Проверка стеков вызовов с отключенным «Просто моим кодом» и показом внешнего кода.
Попробуйте установить точки останова в NoopConverter.Convert, SomeEditor.get_Document и TextEditor.OnDocumentChanged, чтобы выяснить точную последовательность операций.Также обратите внимание, когда отображается сообщение об ошибке Binding.
Временно измените конструктор TextEditor, чтобы сохранить ссылку на каждый экземпляр в открытом статическом поле List, чтобы вы могли определить, какие TextEditors когда-либо были созданы, затем напишите код, который просматриваетони показывают свои GetHashCode()
и результаты BindingOperations.GetBindingExpression(editor, DocumentProperty)
.Убедитесь, что вы удалили общедоступное статическое поле, когда закончите!
Удалите "Path =" из вашего XAML, который создает Binding, чтобы он лучше соответствовал версии C #.(Однажды у меня возникла проблема, когда XAML интерпретировал путь, отличный от конструктора Binding, из-за ITypeDescriptorContext, переданного в PropertyConverter.) Точный эквивалент отправленного вами кода C #: Document="{Binding Document}"
.
Создание пользовательской трассировкипрослушиватель и установите в нем точку останова, чтобы получить стек вызовов при возникновении ошибки привязки, выполнить поиск кадров стека, чтобы найти задействованные объекты и дать им идентификаторы объектов отладчика (щелчок правой кнопкой мыши, Make Object ID), а затем исследовать фактические значениясвойств, чтобы убедиться, что они соответствуют ожиданиям.
Наслаждайтесь!