WPF Bind DataTable для повторных пользовательских элементов управления - PullRequest
0 голосов
/ 13 февраля 2009

Я нахожусь в процессе обучения самому WPF, и у меня возникла небольшая проблема, на которую я не могу найти ответ.

Мое тестовое приложение позволяет помещать файлы изображений в StackPanel. Как только изображение отброшено, в стек добавляется новый пользовательский элемент управления, который отображает некоторые метаданные о файле. Все работает правильно, и я могу перебирать дочерние элементы управления для получения значений.

То, что я предпочел бы сделать, - это позволить пользователю сохранить эти данные в файле, чтобы они могли приостановить работу с данными. Очевидный способ сделать это - сохранить данные в DataTable и сериализовать / десериализовать их в XML. Однако я не знаю, как управлять набором пользовательских элементов управления из объекта DataTable или DataSet - фактически, я даже не знаю, является ли это правильным способом сделать это в приложении WPF. Я более чем готов признать свое невежество здесь и приму лучшие предложения, если они есть.

Краткое изложение логики приложения.

1) Файл сбрасывается (из Проводника Win) на StackPanel
2) Файл запускает создание нового пользовательского элемента управления, который добавляется в StackPanel
3) Данные заполняются в пользовательском элементе управления
4) Обработка данных включает в себя итерацию по контрольному сбору.

Что бы я хотел

1) Файл сбрасывается (из Проводника Win) на StackPanel
2) Данные файла вставляются в какой-то постоянный объект (таблица данных?)
3) обновленная таблица данных управляет генерацией пользовательского элемента управления, который будет добавлен в отображаемую коллекцию.
4) функция сохранения / загрузки сохраняет данные для повторного использования позже.

Заранее спасибо

1 Ответ

3 голосов
/ 13 февраля 2009

При втором подходе вы на правильном пути, на что вам нужно обратить внимание - это ItemsControl - это та вещь, к которой можно добавлять элементы. Это база для ListBox и т. Д., И вы можете сделать так, чтобы она работала так, как вам требуется . Затем существует DataTemplate, который обрабатывает отображаемые элементы управления и привязку данных к этим элементам управления, когда элемент добавляется в базовую структуру данных. В сети есть немало примеров, попробуйте Dr WPF .

Чтобы все работало, базовая структура данных должна поддерживать уведомление об изменениях. Поскольку все происходит автоматически, после настройки Xaml вы можете оказаться в странной ситуации. Вы добавили данные в структуру данных, что, в свою очередь, привело к тому, что элементы управления и данные появились в вашем ItemsControl. Как вы связываете элементы данных и их визуальные элементы управления. Ответ заключается в том, чтобы использовать некоторые встроенные статические методы ItemFromContainer , которые связывают графические объекты с вашим базовым элементом данных, полезные для обработки событий щелчка, и ContainerFromItem , который выполняет обратное.

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