4

Собственно вопрос, как правильно вести отладку WPF приложения?

Например, привязки, которые не работают.

Ведь WPF просто схавывает все и не выдает никаких ошибок. А потом смотришь во WM и видишь, что где-то свойство забыл сделать публичным и все такое.

Monomax
  • 489
iluxa1810
  • 24,899
  • А у вас студия разве не пишет ошибок видимости полей и методов? – Rootware Aug 28 '18 at 13:26
  • А где она такое должна писать? При работе с XAML? – iluxa1810 Aug 28 '18 at 13:26
  • В XAML тоже имеется проверка не только синтаксиса, но доступности переменных. Хотя да, бинды на локальные переменные не подсвечивает. – Rootware Aug 28 '18 at 13:29
  • Ошибки привязок пишутся в debug output окно – tym32167 Aug 28 '18 at 13:39

1 Answers1

10

Для отладки привязанных данных достаточно выбрать соответствующий уровень в настройках студии.

Settings

  • Заходим по пути Средства - Параметры - Отладка - Окно вывода.
  • Меняем значение пункта Привязка данных на тот, который нам нужен, я лично ставлю Предупреждение.
  • Все, теперь при ошибке привязки данных мы будем получать в окне логирования что то на подобии этого (где сразу видно, что программа не нашла в MainViewModel свойства CloseCommand:

System.Windows.Data Error: 40 : BindingExpression path error: 'CloseCommand' property not found on 'object' ''MainViewModel' (HashCode=46793998)'. BindingExpression:Path=CloseCommand; DataItem='MainViewModel' (HashCode=46793998); target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')

Для отладки, этого вполне достаточно, но можно пойти дальше - ReSharper. У него есть уже из коробки подсветка всего необходимого прям в XAML разметке (что тоже очень хорошо помогает в разработке)

ReSharper

Но тут нужно указать DataContext для дизайнера, что бы студия и ReSharper знали от куда брать эти свойства. Делается это путем добавления строки, примерно такого содержания:

d:DataContext="{d:DesignInstance {x:Type main:MainViewModel}}"
EvgeniyZ
  • 15,694
  • Спасибо, я тоже взял на заметку! Хоть и давно пользуюсь ReSharper – JDo Aug 28 '18 at 14:38
  • А отладка всяких триггеров например? Или с ними не должно возникать проблем. – iluxa1810 Aug 29 '18 at 05:31
  • @iluxa1810 Если это какой нибудь DataTrigger, где идет привязка к созданному нами свойству, то там все тоже, что и выше, если другие триггеры, то при запуске программа скорей всего попросту не запустится, указав точные "координаты" проблемного места. Так что да, проблем именно с триггерами возникнуть не должна. Главное в XAML это привязка и синтаксис, с привязкой я вам помог, а синтаксис сама студия укажет вам на ошибку. – EvgeniyZ Aug 29 '18 at 05:38
  • Решарпер часто, кстати, не видит привязанные данные. Особенно если свойство DataContext явно не задано нигде – Anton Shakalo Aug 29 '18 at 13:26