Обнаружение ошибок привязки - PullRequest
2 голосов
/ 09 апреля 2010

Я имею дело с большим приложением WPF, которое выдает большое количество ошибок привязки.Типичная ошибка выглядит следующим образом:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')

Проблема в том, что я не знаю, откуда в приложении это происходит.Поиск полного решения для AncestorType = {x: Type ItemsControl} не требуется, поскольку я до сих пор не знаю, какой результат является виновником.Я попытался установить PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.All; , но дополнительная информация не помогает найти проблемные привязки.Имена файлов и номера строк - это то, что мне нужно.Есть ли способ получить эту информацию?Единственное другое решение, которое я могу придумать, - это присвоить имена кандидатам, а затем сузить их.В этом ключе, есть ли способ автоматически назначить уникальное значение x: Name всем пронумерованным элементам в решении?

Ответы [ 3 ]

3 голосов
/ 11 апреля 2010

Я обычно устанавливаю точку останова в коде, который на самом деле пишет сообщение об ошибке.Когда достигается точка останова, я проверяю визуальное дерево объекта, в котором произошла ошибка привязки, с помощью визуализатора Visual Studio.Это почти всегда говорит мне, где именно в моем коде найти привязку и исправить ее.(Вы можете выяснить, где установить точку останова, установив собственный прослушиватель трассировки и взломав его, а затем проверив стек вызовов.)

Я также спроектировал свое приложение, чтобы минимизировать количество «ложных срабатываний» путемубедившись, что привязки всегда будут действительны, когда источник вообще присутствует.

1 голос
/ 09 апреля 2010

Когда вы видите эти ошибки связывания? Только во время запуска (или загрузки нового AddIn, или нового View, и т. Д.).

В этих случаях я обнаружил, что эти ошибки часто бывают «ложными срабатываниями», поскольку они выбрасываются до инициализации объекта, с которым связан объект. Конечно, это раздражает, но если кажется, что все в вашем приложении правильно связано (здесь, например, у ваших меню правильное горизонтальное выравнивание), то я бы не стал беспокоиться слишком *. 1005 *

0 голосов
/ 30 августа 2011

Похоже на эту ошибку выбора столбца Xceed: http://xceed.com/CS/forums/thread/25140.aspx http://xceed.com/CS/forums/ShowThread.aspx?PostID=26315&PermaPostID=26029

У меня та же проблема, хотя обходные пути, упомянутые в этом посте, не работают для меня. Может быть, они будут работать на вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...