|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
Приложение MVVM. VMs и навигация08.02.2023, 19:59. Показов 10257. Ответов 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 и фильтрация по значению свойства (выбрать по производителю) |
|
Модератор
|
|||
| 18.02.2023, 20:35 | |||
|
INexteR, внедрил интерфейсы и отправил фиксацию.
Посмотрите. Там нужно добавить реализацию проверки пользователя. Изменить хранение пароля на хранение байтового массива его хеша. Добавлено через 1 минуту В идеальной реализации право на создание, изменение данных есть только у Модели. VM не может ничего сама менять в DTO. Добавлено через 3 минуты Посмотрите, я в IUser добавил метод проверки пароля.Но после отправки, понял, что это не верно. HashPassword и CheckPassword не должны быть в интерфейсе.Добавлено через 10 минут INexteR, Забыл все сеттеры сдеть internal и вынос пароля из интерфейса. Создание хелпера для Модели. Добавлено через 37 секунд Вот теперь вроде более менее. Получились нормальные DTO. Добавлено через 37 секунд Внутри Модели их можно менять, а за её границами - нет.
0
|
|||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||||
| 18.02.2023, 20:47 [ТС] | ||||
|
0
|
||||
|
Модератор
|
||
| 18.02.2023, 20:59 | ||
|
Я показал просто получение string.GetHashCode в массив байт. Для учебного задания этого хватает. Для более серьёзного нужно использовать что-то продвинутое, с защищённой передачей пароля даже внутри приложения. Пример: Присоединённые свойства (Attached Property) для PasswordBox: привязка Password и безопасная работа с паролем
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 18.02.2023, 21:00 [ТС] | |
|
Я посмотрел ваши правки. Вы реализуете интерфейсы прямо на классах, которые представляют сущности. Я думал, что эти классы вообще нельзя как-то менять
0
|
|
|
Модератор
|
|||
| 18.02.2023, 21:06 | |||
|
Добавлено через 5 минут Этакий "финт ушами". Допусти́м, если сущности не будут приатачены. Так как Модель этот вопрос сама регулирует, то в данном случае такое допустимо. Есть много разных способов реализации абстракции, и одновременно все использовать нельзя. В данной случае мы будем реализовывать создание контекста БД только на время транзакции. Поэтому все сущности после запроса будут детач.
1
|
|||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 18.02.2023, 21:19 [ТС] | |
|
Элд Хасп, ого, хорошо. Тогда все мои классы DTO удаляем? И можно ли сделать хэширование в самом конце? Просто сейчас на другом хочется сделать акцент, пусть пока будут храниться сами строки
0
|
|
|
Модератор
|
|||
| 18.02.2023, 21:25 | |||
|
Но идём в этом направлении. Добавлено через 2 минуты INexteR, и заметьте, такой "финт ушами" возможен только, если Модель и Репозиторий находятся в проекте (или дружественных проектах) отдельном от остальных слоёв приложения.
0
|
|||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 18.02.2023, 21:44 [ТС] | |
|
Элд Хасп, хорошо, принял, а что мне сейчас делать? С моделью у меня как-то совсем трудно идет, поэтому переключился на view и VM. В vm пришлось проталкивать локатор для смены view, иначе я просто не знаю как сделать. Хотя хотел, чтобы в VM было только то, что содержит модель
0
|
|
|
Модератор
|
||
| 18.02.2023, 23:26 | ||
|
Что нужно для авторизации -посмотрите интерфейс. Нужно реализовать метод public void Login(string login, string password) в файле Shop.IShop.cs.Для его реализации понадобится сделать получение получение нужного пользователя из БД. Сделайте это, так как вашу БД я не могу у себя проверять. Добавлено через 1 минуту Если при выходе пользователя из авторизации нужно произвести какие-то действия в БД, то дополните метод public void Exit().
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 19.02.2023, 10:50 [ТС] | ||
|
0
|
||
|
Модератор
|
|||
| 19.02.2023, 13:30 | |||
|
Я тоже хотел предложить вам создать тестовое хранилище, но вы сами пришли к такому же решению. Добавлено через 1 минуту Свою ветку я удалил чтобы путаницы не было. Добавлено через 19 минут Мы же тестовыми данными замещаем данные БД. В остальном код не должен меняться. Значит тестовые данные должен возвращать репозиторий (Context). Сейчас накидаю примерный код. Добавлено через 2 часа 2 минуты INexteR, фиксация Демо данные в Контексте БД. Реализация авторизации. Устранение ошибок.. Посмотрите изменения. На отладку не было времени. "По уму" демо-данные в контексте БД нужно создавать с помощью EntityFramework Reverse POCO Generator или MockDbSet.Прочитайте Тестирование с помощью макетной платформы. Как я писал ранее, я не шибко в темах по БД. Поэтому по этому вопросу вам лучше обратиться в раздел БД. Заглушки я начал писать, но нужно что при запросах не было попытки подключения БД. Этот момент я ещё не реализовал. Добавлено через 8 минут INexteR, обратите внимание, что зависимости от IShop и IAuthorization - разные. Хотя в данной реализации это один и тот же объект, но их разделение позволяет сравнительно безболезненно изменить реализацию IShop не меняя при этом реализацию IAuthorization и зависимости отнего. Например, в VM авторизации не нужен IShop. Поэтому туда передаём только IAuthorization. Добавлено через 5 минут Даже в ProductsViewModel лучше разделить передачу IShop и IAuthorization.Чтобы конструктор получал их как независимые объекты. Так же не понял вашу затею с локатором. Локатор, вообще-то, это сущность уровня View - вспомогательный класс Представления. Что он делает на уровне VM.... не понятно.
1
|
|||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||||
| 19.02.2023, 14:04 [ТС] | ||||
|
0
|
||||
|
Модератор
|
|||
| 19.02.2023, 14:19 | |||
|
Добавлено через 3 минуты Сейчас занят личными делами. Чуть позже добавлю использование VM авторизации в View и навигацию после авторизации. С демо-данными через Контекст БД - пока не буду разбираться. Нет времени на это. Вы пока разберитесь с изменениями что я уже внёс. И если будет время, как правильно демо-данные через контекст БД прокидывать.
0
|
|||
|
Модератор
|
|
| 19.02.2023, 22:18 | |
|
0
|
|
|
Модератор
|
|
| 22.02.2023, 02:48 | |
|
1
|
|
|
Модератор
|
|
| 22.02.2023, 14:56 | |
|
INexteR, там две фиксации с одинаковым именем. Основные изменения в более ранней.
Добавлено через 1 минуту INexteR, по вопросу темы - понятно как реализована навигация зависящая от состояния Модели?
1
|
|
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 22.02.2023, 18:38 [ТС] | ||
|
Сейчас работаю над фильтрацией и поиском. Возникают вопросы. Фильтрация: пользователь должен иметь возможность отфильтровать данные по производителю. Выбор производителя должен быть из выпадающего списка. Первым элементом в выпадающем списке должен быть “Все производители”, при выборе которого настройки фильтра сбрасываются. Здесь мне коллекцию производителей разместить в хелпере или в VM? Просто ещё нужно добавить первый элемент в виде строки. Поиск: должен осуществляться по всем доступным данным, в том числе по нескольким атрибутам одновременно. Здесь, я так понимаю, нужно будет иметь несколько текстовых полей. В таком случае мне придется в ProductsViewSource создавать несколько DP свойств?
0
|
||
|
Модератор
|
||
| 22.02.2023, 19:27 | ||
|
Поиск - пока оставим. Одновременно за две темы сейчас нет времени браться.
0
|
||
|
Модератор
|
|
| 26.02.2023, 12:58 | |
|
INexteR, внедрил SQLite.
Теперь тестирование упростится и станет таким же как для MySQL Добавлено через 27 минут Пока есть дублирующий код - не стал его убирать, чтобы увидели как задавать настройку БД с помощью атрибутов у классов сущностей и их свойств.
0
|
|
|
Модератор
|
|
| 27.02.2023, 11:09 | |
|
INexteR, кстати.
А почему картинки хранятся в сборке, а не в БД?
0
|
|
| 27.02.2023, 11:09 | |
|
MVVM первое приложение WPF приложение с паттерном MVVM Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|