|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
Приложение MVVM. VMs и навигация08.02.2023, 19:59. Показов 10228. Ответов 134
Здравствуйте.
Имеются следующие вопросы. Как при соблюдении mvvm передать в VM свойства view такие как SelectedItem? Знаю, что можно передавать через параметр команды, но в моем случае за раз в VM нужно отправить 2 объекта - логин и пароль (в модели у меня нет этих свойств, соответственно, я не должен определять их в VM. Хотя многие так делают, но это всё-таки нарушение). Нашёл решение с помощью применения MultiBinding для параметра, но мне кажется, что это слишком громоздко, так как при таком подходе каждый раз придется реализовывать конвертер. Вообще, говоря, очень трудно приходится, когда в VM нет нужных свойств, от этого обстоятельства не выходит отключать кнопку (альтернативой может служить триггер на свойство IsEnabled во view, но от этого снова приходится прикладывать больше усилий из-за описания стиля и, возможно, конвертера. Элд Хасп подсказывал, что для этих целей можно сделать прокси класс, но я недоумеваю как и где. Было бы удобно, если бы по правилам mvvm в VM допускалось хранить все необходимые свойства, а не только те, которые имеются в модели. По той же причине не стал помещать в VM команду для кнопки, которая предназначена для входа в роли гостя. Пока что в коде view подписал хелпера на щелчок по ней. В результате просто должен произойти переход к другому view, это не логика модели. Сама навигация вызывает дополнительный вопрос, нужны рекомендации по её реализации. Также можно отдельно рассмотреть модель. Правда там пока что немного кода. Важны все замечания. Ещё имеется dll библиотека с вспомогательными классами, применимыми к mvvm. По ней тоже можно сделать замечания. Вот ссылка на репозиторий https://github.com/INexteR/NewTrade/tree/Trial. В нем также содержится документ с заданием.
0
|
|||
| 08.02.2023, 19:59 | |
|
Ответы с готовыми решениями:
134
Приложение MVVM, VMs и навигация: Создание Модели Авторизация. Приложение MVVM. VMs и поиск (фильтрация по текстовому значению) Приложение MVVM. VMs и фильтрация по значению свойства (выбрать по производителю) |
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 02.03.2023, 17:02 [ТС] | ||
|
0
|
||
|
Модератор
|
||
| 02.03.2023, 17:16 | ||
|
Файл sqliteTest.db не включён в проект и не является частью сборки. Кроме того, константное имя БД - это временное решение. Потом можно будет задавать его из App или, вообще, из внешних настроек. Так же - да, можно SQLite включить в сборку и дублировать его. Но если вы будете использовать серверную бд? Тогда вместо названия файла будет строка подключения. А Code First для любой БД правильно создаст начальную базу.
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 02.03.2023, 17:45 [ТС] | ||
|
Добавлено через 36 секунд Ну хорошо, пусть будут
0
|
||
|
Модератор
|
||
| 02.03.2023, 18:08 | ||
|
Это временное решение, ввиду того что без сервера я не могу проверять работу контекста БД. Потом вы замените SQLite на нужную вам БД, и текстовые данные будут так же использоваться для её инициализации. Добавлено через 2 минуты Вариант с парсингом коллекций был неудобен тем, что требовал разного кода для работы с коллекциями и работой с БД. Поэтому "простого переключения" от одного к другому не получалось. Я бы отлаживал один код, а вы запускали другой - и неизвестно было бы где и как искать ошибку, если бы она возникла. С SQLite снимается эта неопределённость.
1
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 03.03.2023, 10:07 [ТС] | |
|
0
|
|
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 04.03.2023, 21:43 [ТС] | |
|
Элд Хасп, отправил фиксацию! Добавил необходимые интерфейсы типа ISuppliersSource, ICategoriesSource, но они только с одним методом получения коллекции, без события, так как счел его ненужным. Они загружаются только один раз перед товарами, а когда дело доходит до товаров, то все эти ранее загруженные коллекции прикрепляются к контексту. То есть ещё прикрепление реализовано в тривиальной манере. Также добавил окно AddOrUpdateDialog для соответствующих действий, но пока пустое. И ещё теперь есть команда удаления товара.
Возникли такие вопросы. Почему Вы в методах Add/Update передаете в контекст копию товара? Почему не сам объект? И почему в ProductsView в ListBox является выбранным первый элемент? У выделенного ListBoxItem фон обычно голубой, а тут он светло-серый. Я опознал этот элемент выбранным по тому, что при переходе к каталогу кнопка удаления включена. В разметке выбранный элемент не задан
0
|
|
|
Модератор
|
||
| 05.03.2023, 10:27 | ||
IProduct, а для CatalogContext нужен internal partial class Product, который может создать только сама Модель.Добавлено через 3 минуты Я сейчас доделаю маппер чтобы облегчить копирование и создание копий. Потом дальше продолжу. А то появляется много дублирующего кода.
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 05.03.2023, 10:56 [ТС] | |
|
0
|
|
|
Модератор
|
||||||||
| 05.03.2023, 13:31 | ||||||||
|
INexteR, я вроде закончил с маппером.
Теперь можно будет приступить к созданию страницы редактрования-добавления товара. Посмотрите внесённые изменения. и обратите внимание на изменения в интерфейсе IProductsViewModel.Его команды в ProductsViewModel нужно реализовать.Так же в IProductsViewModel стоит добавить все интерфейсы источников.Добавлено через 3 минуты Мы же в View или VM будем создавать НОВЫЕ экземпляры товаров, с новыми данными. Их объединяет с Товаром репозитория, только общий интерфейс. Я для downcast нужно чтобы "Товар Представления" был производным от "Товара Репозитория." Добавлено через 1 минуту Посмотрите пример в Shop.cs:
Добавлено через 4 минуты Как VM узнает что она завершилась? Если загрузка завершается для всех одновременно, то можно сделать один общий интерфейс (переделать IManufacturersSource) с одним событием и несколькими источниками. Событие будет означать что нужно обновить ВСЕ источники. Добавлено через 1 час 4 минуты INexteR, добавил диалоги редактирования-просмотра. Посмотрите последнюю фиксацию.
0
|
||||||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||||||||||||||
| 05.03.2023, 18:00 [ТС] | |||||||||||||||
Добавлено через 1 час 12 минут Добавлено через 2 часа 33 минуты Элд Хасп, я посмотрел вашу фиксацию. Хочу сказать, что давайте не будем добавлять режимы дизайнера. У нас и так много кода получается. До этого я задавал вопрос по этому поводу просто из интереса. И вот ещё насчет диалога. Для чего Вы описываете базовый класс для разных типов? Требуется же только добавление и редактирование товара. И зачем в диалоге режим View? Я его убрал, он по заданию не нужен
0
|
|||||||||||||||
|
Модератор
|
|||||
| 05.03.2023, 20:42 | |||||
|
Для удаления, это ещё может быть так. А для обновления и добавления это точно не будет так. к тому времени....Вот вам приспичит изменить представление и показать сразу список производителей и чего-то там ещё. И теперь из-за изменений представления менять Модель? Такого быть не должно. Если событие загрузки у них единое, то и нужно их всех объединить в одном интерфейсе с одним событием. Добавлено через 2 минуты INexteR, на данный момент у вас уже всё есть для создания формы редактирования-добаления. В основное Окно нужно только добавить кликер или команду для вызова диалога редактирования. Добавлено через 10 минут INexteR, интерфейс IProductsViewModel это уровень VM и он может "легально" использовать библиотечные классы VM.Поэтому лучше в нём использовать RelayCommand с нужным типом. ICommand только добавляет лишнего кода. Добавлено через 3 минуты
0
|
|||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 05.03.2023, 20:49 [ТС] | ||
|
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 05.03.2023, 20:54 [ТС] | |
|
0
|
|
|
Модератор
|
||
| 05.03.2023, 20:54 | ||
|
И ссылка на RelayCommand была бы циклической, что создало бы ошибку во время сборки. Сейчас мы ужу разделили интерфейсы, поэтому можно безопасно использовать RelayCommand.
1
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 05.03.2023, 20:56 [ТС] | |
|
0
|
|
|
Модератор
|
||
| 05.03.2023, 20:59 | ||
|
Для нестрого MVVM или тестирования - чёрт с ним. А так у нас задан отлов исключений в App. Если всё правильно вызывается, то исключения будут отловлены там.
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||||||||
| 05.03.2023, 21:10 [ТС] | |||||||||
|
Добавлено через 5 минут
0
|
|||||||||
| 05.03.2023, 21:10 | |
|
MVVM первое приложение WPF приложение с паттерном MVVM Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|