|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
Приложение MVVM. VMs и навигация08.02.2023, 19:59. Показов 9784. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|