|
3 / 2 / 1
Регистрация: 10.10.2015
Сообщений: 24
|
|||||||||||||||||||||
WPF Загрузка данных из XML в DataGrid26.11.2018, 12:31. Показов 9655. Ответов 33
Всем привет.
У меня есть View, на котором есть DataGrid. В DataGrid должен подгружаться XML-файл по нажатию на кнопку "Загрузка XML". Интересует вопрос как организовать отображение данных из XML в DataGrid. Понимаю, что надо использоваться ObservableCollection, но не знаю как написать это в DataGrid и реализовать в коде. Также в модели присутствует функционал создания XML и добавления данных в XML, но думаю что он тут не играет какой-либо роли. Код ДатаГрид MainView.xaml
RootVM.cs Кликните здесь для просмотра всего текста
Код Модели: MainModel.cs Кликните здесь для просмотра всего текста
Код XML:
0
|
|||||||||||||||||||||
| 26.11.2018, 12:31 | |
|
Ответы с готовыми решениями:
33
Загрузка и сохранение DataGrid, xml Чтение их xml опреденных пунктов и загрузка в datagrid |
|
управление сложностью
|
||
| 29.11.2018, 07:59 | ||
|
Ребята, позвольте вмешаться, пока не поздно
![]() Если хотите делать все по феншую, то логичнее сделать абстрактный класс с необходимыми методами, и уже наследоваться в реализации от него, иначе сегодня нужен xml, завтра json и т.п. (это я к нижеследующему)
0
|
||
|
3 / 2 / 1
Регистрация: 10.10.2015
Сообщений: 24
|
|||||||||||||||||||||||
| 29.11.2018, 11:20 [ТС] | |||||||||||||||||||||||
|
Предполагается, что на форме есть еще две кнопки "Сохранить изменения" и "Выйти". Тогда к StackPanel, содержащие кнопки "Добавить", "Редактировать", "Сохранить", "Сохранить в...", "Открыть XMl-файл" и кнопке "Удалить" к свойству Visibility прибиндить свойство Visible. К StackPanel с кнопками "Сохранить изменения" и "Выйти" прибиндить свойство VisibleSave: Изменившийся XAML:
На счет различия режима добавления/редактирования: Создать свойство в VM и Enum:
0
|
|||||||||||||||||||||||
|
Модератор
|
||
| 29.11.2018, 11:21 | ||
|
Абстрактный класс - мне, кажется, пока нового и сложностей для RussianVodkaL и так хватает.
0
|
||
|
Модератор
|
||||
| 29.11.2018, 11:37 | ||||
|
Чуть позже скину пример реализации. Но из собственного опыта, лучше сделать другую реализацию. Нам понадобятся в VM флаги режима редактирования, создания нового клиента и наличия изменений. Флаги будут булевы и, как мне порекомендовали в своё время, начинаться с "Is...". Для привязки булевых свойств к свойству Visiblity нужно использовать либо триггеры, либо конвертеры. Сделаем с помощью конвертеров - чтобы не загружать XAML (пока Вам и так сложностей хватает) Добавлено через 2 минуты
0
|
||||
|
Модератор
|
|||||||||||||||||||||||||||||||||||||
| 29.11.2018, 15:19 | |||||||||||||||||||||||||||||||||||||
|
Мы уже подошли к установлению взаимосвязей внутри View. Теперь нам без интерфейса INPC не обойтись. Я использую свой базовый класс для реализации интерфейса
В результате наша VM выглядит так
Первый - конвертация bool в Visibility. Сделал свой, а не использую системный. В своём предусмотрел возможность инвертирования через параметр.
Добавлено через 2 минуты Добавлено через 6 минут RussianVodkaL, обратите внимание на строчку в словаре
Устанавливая в этой строке "True" мы можем смотреть как выглядит наша View в режиме редактирования. Вот для этого, в том числе, и нужен DataContext времени разработки.
0
|
|||||||||||||||||||||||||||||||||||||
|
Модератор
|
||||||
| 29.11.2018, 15:23 | ||||||
|
Забыл написать - для проверки на равенство значений добавил в Client переопределение Equals и GetHashCode. И для создания копии - метод Copy. Текущий код Client
0
|
||||||
|
3 / 2 / 1
Регистрация: 10.10.2015
Сообщений: 24
|
|
| 29.11.2018, 20:25 [ТС] | |
|
Для чего указывать аттрибут [ValueConversion]? Что он дает? Какое его предназначение? Сколько не читал про атрибуты, так и не понимаю.
Можно ли обойтись без переопределения метода GetHashCode()? Завтра буду разбираться...
0
|
|
|
Модератор
|
|||
| 29.11.2018, 21:32 | |||
|
0
|
|||
|
3 / 2 / 1
Регистрация: 10.10.2015
Сообщений: 24
|
|
| 30.11.2018, 11:02 [ТС] | |
|
В принципе все понятно.
Вопрос на счет конвертеров: правильно ли я понял, что мы можем конвертировать, например, тот же тип Visibility в, например, тип int или double? И задать установку своих значений, которые будут соответствовать значениям в классе Visibility?
0
|
|
|
Модератор
|
||
| 30.11.2018, 11:42 | ||
|
0
|
||
|
Модератор
|
|
| 30.11.2018, 19:47 | |
|
Столкнулся с неожиданной проблемой - метод Equals не должен давать равенство для разных объектов. Иначе XAML начинает гнать. Переделал Equals. А для сравнения объектов создал в клиенте метод Unequally.
Завершил VM времени исполнения. Может ещё какие мелкие доработки - не помню. Весь проект в рабочем виде приложен. Погоняйте его, посмотрите. Может ошибки где есть. Какие вопросы появятся - задавайте.
0
|
|
|
Модератор
|
|
| 30.11.2018, 20:04 | |
|
Самое главное забыл-то написать. С чего вся тема начиналась.
Посмотрите в модели я добавил вызов события PropertyChanged в методах которые изменяют данные Add, RemoveID и ChangeID. При вызове события я передаю имя "Список", но такого свойства нет нигде в проекте. В VM в методе Model_PropertyChanged я перехватываю это событие и проверяю переданное значение, если это "Список", то обновляю свойство Clients. Из этого ясно, что событие PropertyChanged это всего лишь передача какой-то стринговой переменной. Ни какого бОльшего функционала оно не несёт. Само по себе оно не может обновлять значения свойств.
0
|
|
| 30.11.2018, 20:04 | |
|
Помогаю со студенческими работами здесь
34
Загрузка данных из XML файла в ClientDataSet (xml как база данных) Загрузка данных из MySql в DataGrid Загрузка данных из datagrid в datatable Сохранение данных из DataGrid в XML Загрузка данных из таблицы Access в DataGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|