Контент данных времени разработки VS (пример данных) содержит исключение

заявка

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

Настраивать

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

Затем в представлении я установил время разработки DataContext следующим образом:

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

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

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

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

Исключение внутри DataContext

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

Привязка к нему

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

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

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

Отладка

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

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

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

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

Выводы

Я в тупике. Любые идеи?

Обновлять

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

Вот пример, если кто-то еще хочет посмотреть.


person aurath    schedule 30.03.2019    source источник


Ответы (1)


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

person juster zhu    schedule 30.03.2019
comment
Код в офисе, я не смогу добраться до понедельника. Но я уверен в нескольких вещах. 1. Отладчик сообщает мне, что образец генератора данных конструируется успешно, и DataSourceProvider не содержит исключений, когда он покидает генератор. 2. Blend сообщает мне, что видит сгенерированный контекст данных с ожидаемыми полями и с дополнительным полем ошибки. Но никаких ценностей нет. Когда эти две вещи верны, исключение ДОЛЖНО произойти после того, как оно покинуло мой генератор данных, но до того, как его увидит дизайнер. - person aurath; 30.03.2019
comment
Поэтому я создал новый проект, чтобы попытаться воспроизвести проблему. Исключение по-прежнему отображается на панели «Данные» в режиме наложения, но вы можете выполнить привязку к сгенерированным образцам данных. Итак, теперь я подозреваю, что исключение, к которому я пытался получить доступ, - отвлекающий маневр, и что-то еще сбивает мою привязку. Я собираюсь сократить различия между рабочим кодом и моим, пока не выясню, что его нарушает. Я все же хотел бы знать, что в этом исключении. Я отправлю минимальный пример, если кто-то еще захочет взглянуть на указанное исключение. - person aurath; 01.04.2019