Применение
Это приложение WPF, предназначенное для отправки файлов между клиентами. Я работаю над пользовательским контролем, предназначенным для отображения списка отправленных файлов, их получателей и т. Д.
Настройка
Я пытаюсь стилизовать элемент управления, но мне нужны примеры данных для его заполнения. Следуя этим инструкциям , я создаю SampleFilesSource.cs
, который расширяет DataSourceProvider
. Он генерирует экземпляр модели представления, заполненной ObservableCollection
случайных недавних файлов.
Далее, в представлении, я установил время проектирования DataContext
с помощью этого:
<d:UserControl.DataContext>
<sample:SampleFilesSource/>
</d:UserControl.DataContext>
Но ничего не появляется ... Что случилось?
Исключение, связанное с данными
Ну, посмотрим. Панель данных в Blend позволяет нам увидеть, что во время разработки 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. Тем не менее, я действительно могу связать сгенерированные данные примера в примере, так что теперь я думаю, что исключением была красная сельдь, и моя проблема в другом месте. Я даже не уверен, есть ли исключение, а панель «Данные» просто показывает, что он делает, потому что там МОЖЕТ быть исключение.
Вот пример, если кто-то еще хочет заглянуть.