VS Design Time DataContext (пример данных) содержит исключение - PullRequest
0 голосов
/ 30 марта 2019

Применение

Это приложение WPF, предназначенное для отправки файлов между клиентами. Я работаю над пользовательским контролем, предназначенным для отображения списка отправленных файлов, их получателей и т. Д.

Настройка

Я пытаюсь стилизовать элемент управления, но мне нужны примеры данных для его заполнения. Следуя этим инструкциям , я создаю SampleFilesSource.cs, который расширяет DataSourceProvider. Он генерирует экземпляр модели представления, заполненной ObservableCollection случайных недавних файлов.

Далее, в представлении, я установил время проектирования DataContext с помощью этого:

<d:UserControl.DataContext>
    <sample:SampleFilesSource/>
</d:UserControl.DataContext>

Но ничего не появляется ... Что случилось?

Исключение, связанное с данными

Ну, посмотрим. Панель данных в Blend позволяет нам увидеть, что во время разработки DataContext доступно для привязки. Давайте посмотрим.

Exception inside DataContext

Ну, это интересно. В моем DataContext есть исключение. Панель данных не показывает ни одно из значений, только то, к каким полям можно привязать. Так как же мне взглянуть на исключение Message? Могу ли я привязать к нему?

Привязка к ней

К сожалению, нет ... На самом деле единственная привязка, которую я могу получить для вывода любого текста, это "(Коллекция)", когда я пытаюсь {Binding Data.RecentFiles}. Поля видны под объектом Data, но ничего не имеет значений.

Но что, если я установлю время выполнения DataContext для генератора данных выборки? Просто удалите этот маленький d: из тега DataContext и отладьте ... Все еще не повезло. Взглянув на живое визуальное дерево, я вижу, что DataContext привязан к экземпляру модели представления. И что интересно, на этот раз в текстовом тексте единственной вещью является поле Error.

Во время выполнения нет поля Data, а поле Error является экземпляром Exception. Я думаю это ноль. У проводника свойств просто есть пустое поле, без параметров для его просмотра. Я думаю, странно, что в сеансе отладки не было обнаружено необработанных исключений. Это застряло в DataContext как-то?

Debugging

Итак, кроме очистки, перестройки, перезапуска VS, перезагрузки компьютера и всего, что я уже пробовал, что еще я могу сделать, чтобы взглянуть на это Message? Вот удобное небольшое руководство по присоединению отладчика к процессу конструктора Visual Studio. Довольно круто!

Я могу узнать только пару вещей из отладчика:

  • Моя модель представления, сгенерированная моим DataSourceProvider, действительна, выглядит хорошо, исключений нет.
  • Поле Error моего DataSourceProvider равно нулю, когда оно покидает мой код.

Итак, все, что я могу сказать, это исключение, которое возникает после того, как я позвонил DataSourceProvider.FinishQuery, и до того, как дизайнер получит в руки сгенерированный DataContext.

Выводы

Я в тупике. Есть идеи?

Обновление

Я создал минимальный пример для совместного использования, и, безусловно, исключение действительно отображается на панели «Данные» в выражении blend. Тем не менее, я действительно могу связать сгенерированные данные примера в примере, так что теперь я думаю, что исключением была красная сельдь, и моя проблема в другом месте. Я даже не уверен, есть ли исключение, а панель «Данные» просто показывает, что он делает, потому что там МОЖЕТ быть исключение.

Вот пример, если кто-то еще хочет заглянуть.

1 Ответ

1 голос
/ 30 марта 2019

Можете показать код?Вы можете посмотреть на проблему простым способом, вы можете попытаться связать одно значение.В случае успеха, вы можете доказать, что ваша обязательная часть не проблема.Затем вы можете начать с вашего шаблона данных.

...