|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||||||||||||||||
WPF Отправка объекта IList с выбранными элементами в ViewModel25.01.2023, 19:19. Показов 4140. Ответов 69
Метки c# wpf mvvm (Все метки)
Здравствуйте!
Допустимо ли в контексте MVVM следующим образом пробросить в ViewModel объект выбранных в списке элементов? Нарушает ли данная операция идею шаблона? Представление:
0
|
||||||||||||||||
| 25.01.2023, 19:19 | |
|
Ответы с готовыми решениями:
69
Передача объекта в ViewModel Передача объекта во View из ViewModel (WPF/MVVM/Caliburn) |
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||||
| 28.01.2023, 18:40 [ТС] | ||||
|
0
|
||||
|
1596 / 601 / 185
Регистрация: 05.12.2015
Сообщений: 970
|
|
| 28.01.2023, 18:48 | |
|
INexteR, Переделал твой пример. Фильтрацию надо обновлять через свойства, а не методы. Там установлен Fody.
UnholyImplementation.zip
1
|
|
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 28.01.2023, 18:50 [ТС] | |
|
Элд Хасп, подождите, Вы пишите про поддержку возможности смены сущности, но как я могу заменить объект одного типа в Proxy объектом другого типа? Или эти примеры не связаны друг с другом?
0
|
|
|
Модератор
|
|||||||||||||||||||||||||||||||
| 28.01.2023, 19:10 | |||||||||||||||||||||||||||||||
|
INexteR, чуть отвлекли домашние дела.
По основному вопросу. Основа кастомной фильтрации, сортировки такая группа типов:
Сначала хелпер:
1
|
|||||||||||||||||||||||||||||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 28.01.2023, 19:16 [ТС] | |
|
Элд Хасп, и да, в Proxy ссылка на декапсулированную сущность была для того, чтобы извлекать её и работать именно с ней. В том же моем примере фильтрации или поиска мог бы понадобиться сам объект
0
|
|
|
Модератор
|
||||||
| 28.01.2023, 19:27 | ||||||
|
Из документации:
В этом смысле вся VM (весь слой) - это прокси Модели. Поэтому, то что эти классы прокси, это не значит что они не часть ViewModel. Добавлено через 1 минуту По использованию эти классы вполне можно назвать "маленькими вээмками". Добавлено через 7 минут Если бы был иммутабельный DTO, то было бы вполне допустимо. Допустим, изменяется существующий Product. Из Модели приходит новый Product с новыми значениями в свойствах. Вам нужно "гладко" заменить старый Product новым. Как это сделать? Он может быть в разных коллекциях, в разных свойствах, в разных окнах и т.д. Искать во всех возможных места? Обычно делается таблица (или словарь) соответствий между Product и его прокси, который используется в VM и View. Непосредственно Product нигде не используется. Как пришёл новый новый Product, по таблице ищется его прокси и только в нём заменяется старый. Так как при этом происходит уведомление по всем свойствам, то автоматически обновляется всё представление где бы не использовался этот прокси.
1
|
||||||
|
Модератор
|
||||||
| 28.01.2023, 21:07 | ||||||
|
INexteR, чуть изменил реализацию.
Так, по-моему, лучше читается код:
0
|
||||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 28.01.2023, 21:27 [ТС] | ||
|
proa33, хороший пример, но я не знаком с таким пакетом как Fody. И ещё такой нюанс: поле выбора радиокнопки сортировку уже нельзя отменить, а в моем примере такая функция поддерживалось посредством щелчка по уже активной кнопке
Добавлено через 12 минут Элд Хасп, хорошо, спасибо, но только не понял, каким образом происходит данное
0
|
||
|
1596 / 601 / 185
Регистрация: 05.12.2015
Сообщений: 970
|
|||
| 28.01.2023, 21:36 | |||
|
Вот добавил эту кнопку. Сравните сколько это стоило усилий. UnholyImplementation.zip
0
|
|||
|
Модератор
|
||
| 28.01.2023, 22:52 | ||
|
Просто подключаете пакет и он в посткомпиляции заменяет автоствойства на свойства с уведомлением INPC. Сам Fody - это пакет для посткомпиляционной сборки. Для INPC нужно использовать PropertyChanged.Fody. Для команд тоже есть расширение. Кроме внедрения уведомления можно с помощью атрибутов задавать зависимости свойств.
0
|
||
|
Модератор
|
|||||||||||||||||||||||||||
| 29.01.2023, 00:15 | |||||||||||||||||||||||||||
Исходники: UnholyImplementationV01.7z
1
|
|||||||||||||||||||||||||||
|
Модератор
|
||||||
| 29.01.2023, 00:25 | ||||||
|
INexteR, вот с таким шаблоном красивше:
1
|
||||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
| 29.01.2023, 11:30 [ТС] | |||
|
Добавлено через 5 минут Ну и конечно же спасибо Вам за это гениальное решение, это просто шарм! Надо во всем разобраться. Ещё увидел для себя некоторую особенность - вызов Task.Run с передачей асинхронного метода. Никогда так не делал, ставил await на самом Task.Run и передавал синхронный метод. Интересный трюк Добавлено через 18 минут
0
|
|||
|
Модератор
|
||||||||||||||||||
| 29.01.2023, 11:48 | ||||||||||||||||||
|
По факту я создаю минитаймер. Но его удобнее отлаживать, так как остановка в коде метода или в обработчике события (по breakpoint) останавливает таймер и можно пошагово проверить как работает код. С обычным таймером так не выйдет поскольку остановка в одном обработчике, не останавливает поднятие событий для следующих интервалов. А то о чем вы пишите делается тогда, когда нужно дождаться ожидания выполнения таска. Добавлено через 14 минут Но можно сделать и без него. Тогда от модели будет поступать старая сущность и та которая её заменяет. Напишу здесь, поэтому не полный код:
1
|
||||||||||||||||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 29.01.2023, 12:25 [ТС] | ||
|
А нормально то, что у меня класс модели статический? Просто у меня источник данных один
0
|
||
|
Модератор
|
||
| 29.01.2023, 15:04 | ||
|
Статическими могут быть какие-то службы, сервисы. В чём смысл паттернов семейства MV*?В абстракции Представления от Бизнес Логики. В Шарпе такая абстракция задаётся интерфейсом. А у статического класса нет реализации интерфейса. Поэтому при малейших изменениях в БЛ Модели, придётся пересобирать и сборки View и/или VM (контролера, презентера и т.д.). А это нарушает саму концептуальную идею паттернов MV*.Поэтому для этих паттернов статическая Модель это уже не просто моветон, а явное нарушение паттерна. Добавлено через 1 минуту Структура связей в WPF Решении Добавлено через 3 минуты На этой схеме нет прямых зависимостей слоёв друг от друга. Поэтому можно любой слой поменять не трогая при этом другие слои. Со статическим классом так не получится. Статический класс может возвращать экземпляр Модели (или Моделей) с которым VM будет работать через интерфейс. То есть статический класс может быть фабрикой для получения нужных экземпляров. Регистрация типов, инициализация фабрики будет происходить при старте приложения в App.
1
|
||
|
Модератор
|
|
| 29.01.2023, 16:35 | |
|
INexteR, не пришло в голову нормального примера для демонстрации автозамены через словарь.
Просто добавил категорию в продукт и стал случайно менять название у категории. Во всех продуктах название категории в представлении автоматически обновляется. Без словарей и замены в прокси источника это было бы намного сложнее реализовать. Исходники: UnholyImplementationV02.7z
1
|
|
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||||||||||||||||
| 29.01.2023, 17:04 [ТС] | ||||||||||||||||
|
Элд Хасп, я в восторге от вашей реализации, правда смутили два триггера данных на константы перечисления, так как эти значения не будут изменяться. Поэтому я видоизменил части кода в представлении
0
|
||||||||||||||||
|
Модератор
|
||
| 29.01.2023, 18:21 | ||
|
INexteR, в общем виде лучше использовать какую-то типовую реализацию.
Что-то типа DictionaryConverter и DictionaryTypeConverter.
1
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||||||
| 29.01.2023, 22:59 [ТС] | ||||||
|
Элд Хасп, можно спросить, для чего это?
0
|
||||||
| 29.01.2023, 22:59 | |
|
MVVM. Получение данных объекта по сети - в model или во viewmodel?
Как преобразовать List<List<string>> в IList<IList<string>> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе.
Самым главным критерием для меня было создание паролей, в котором отсутствуют знаки: | 1 l I
Обработка содержит реквизиты:
-. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|