|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||||||||||||||||||||
UWP Разбор MVVM подхода с использованием API и Json04.02.2022, 21:07. Показов 9467. Ответов 126
Доброго времени суток,
Как уже писал, перехожу на подход MVVM и сталкиваюсь с проблемами, шерстил форум, но не нашел подходящие решение для моего случая. Очень буду благодарен за помощь. Логика следующая, пользователей вводит номер телефона, по апи идет запрос и я получаю ответ в виде JSON, и если JSON приходит в response, то панель с смс должна появится. Если номер не правильный то приходит в error значение. Проблема вот в чем. Как мне вернуть данные из Model в ViewModel, не используя статический класс или свойство ? Да в принципе, как правильно управлять данными которые пришли в model и передать их в Viewmodel на примере JSON. View:
Так же я понимаю, что возможно здесь ошибки подхода MVVM, любые поправки с теплотой приму
0
|
|||||||||||||||||||||
| 04.02.2022, 21:07 | |
|
Ответы с готовыми решениями:
126
Создание программ с использованием структурного подхода Напишите программу (с использованием ООП подхода) |
|
Модератор
|
|||
| 12.02.2022, 23:54 | |||
|
Если да, то значит надо добавить в интерфейс настроек и App перед завершением приложения сохранит его. Я посмотрю.
0
|
|||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
||
| 13.02.2022, 00:16 [ТС] | ||
|
Элд Хасп,
Обновил реп, но так и не смог пока запустить программу, ошибку с не поддерживает null в С# 7.3 используйте версию языка 8.0 или выше, не смог решить. Но можно решить это потом, главное сейчас саму суть модели довести. Добавлено через 55 секунд Да нужно хранить, недели две где-то. Там есть проверка токена, которую я реализовал под CheckToken.
0
|
||
|
Модератор
|
|
| 13.02.2022, 01:50 | |
|
Ihave, вы умете пользоваться токенами задач?
Если нет то освойте: Использование списка задач. Добавьте два токена: "RES" - для вопроса и "ANS" - для ответа.
0
|
|
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|
| 13.02.2022, 02:21 [ТС] | |
|
0
|
|
|
Модератор
|
|
| 13.02.2022, 04:43 | |
|
Ihave, отправил ответы на вопросы фиксация 286165a8.
Вы очень торопитесь и хотите решить все вопросы сразу. Так не получится. Для начала запустим работу настроек. Потом создадим страницу авторизации, интерфейс VM к ней. Отладочную VM, отладим работу сnраница-VM. И только после этого в VM внедрим Модель и будем отлаживать всё вместе. Потом следующую страницу и т.д.
1
|
|
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||
| 13.02.2022, 11:15 [ТС] | |||
|
0
|
|||
|
Модератор
|
||||
| 13.02.2022, 13:34 | ||||
|
Отвечаю по мере возможности. Если бы у вас были знания, то можно было бы сократить объяснения. Но сейчас лучше подробно, детально пройти каждый шаг. 2) Изменил возвращаемый тип метода проверки токена на перечисление. Сейчас немного больше вник в ваше приложение и появился такой нюанс. В общем случае, вся работа с Хранилищем (Источником Данных) инкапсулируется в Репозитории. И Репозиторий должен быть максимально абстрактным, поэтому возвращать коды ошибок в типе специфичен для Хранилища нельзя. Но как я понял сейчас, всё ваше приложение - это локальный GUI для WEB Сервера. То есть, тип Хранилища предопределён условиями ТЗ на само Приложение. В таком случае, нет задачи абстрагирования от Хранилища и можно возвращать коды (и простые типы) специфичные для Хранилища, то есть HttpStatusCode, но нужно его (наверное) как-то "разбавить" на случай если будет вызвана проверка для отсутствующего токена. Отправил фиксацию 8d4788cf:
0
|
||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||||
| 13.02.2022, 17:12 [ТС] | |||||
|
Конструкция там такая, если в response.StatusCode = 200, то загрузка сразу MainPage, если 401 - показать например что не оплачен доступ или что то вроде того, 402. Токен истек и нужно снова авторизаваться и тд CheckToken, служит больше проверкой на сколько актуальный токен и его так сказать права по ответам HTTP кодов. Соотвественно, мы должны возвращать StatusCode например в APP и говорить, что именно потом уже показать. значение всегда можно самому расшифровать и задать. Поэтому чтобы соблюдать правильность, можно спокойно int оставить, и опять же обойтись без флагов, а просто реагировать на определеный код в int.Потому что описание всех ввидов и так есть: https://ru.wikipedia.org/wiki/... D1%8F_HTTP Добавлено через 14 минут Еще раз хочу по модели пробежатся Модель Connect - служит только для того чтобы получить токен по авторизации. Используется всего один раз, если нету токена или он не действительный. Модель CheckToken - только проверить действительный ли токен и какие у него права согласно пользователю. Используется только при старте программы или после того как первый раз получили его (когда авторизовываемся по телефону). Модель GetDaten - получение всех данных! Уже не важно каких. Используется напротяжение всей программы для получение разных данных. В его составе Код Токена, который используется для индетификации пользователя.
0
|
|||||
|
Модератор
|
||||||||
| 14.02.2022, 00:20 | ||||||||
|
Но как быть в случае, если токена нет во время его проверки? Или можно не обращать внимание на это, какой вернёт код - такой вернёт.
Методы GetNews и GetDaten - правильно состыкованы. Возможно только стоит в GetNews все параметры и возвращаемые значения, передавать через один входной DTO. Но это пока не критично, а кортежи удобнее деконструировать в отдельные переменные.
0
|
||||||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
||||
| 14.02.2022, 12:15 [ТС] | ||||
|
Так как в 1) Connect лишь один заголовок (Headers), но есть данные в Poste JSON. Возвращать надо ответ JSON и код статуса HTTP 2) CheckToken 4 заголовка, но нету данных в Poste JSON. Возвращать надо только код статуса HTTP 3) GetDaten 4 заголовка и всегда есть данные в Poste JSON. Возвращать надо ответ JSON и код статуса HTTP По идее можно 2 и 3 совместить, тогда в CheckToken пустой byte слать и обратно пустой JSON. Но это так себе решение... А сделать отдельно request, все равно придется делать дополнительные воиды на эти 2 случая ![]() У вас есть идеи ?
0
|
||||
|
Модератор
|
||||
| 14.02.2022, 13:59 | ||||
|
НО! Это верно только в такой конкретной задаче как ваша: "Построение локального GUI для WEB сервера". Но суть здесь не в уменьшении кода. Допусти, в будущем, изменится формат запроса. Тогда вам придётся в нескольких местах в коде искать где создаётся запрос и менять там. Это увеличивает риск ошибок в сопровождении продукта. Поэтому всё надо собрать в одном месте. Сейчас тугова-то со временем. Когда будет посвободнее, вникну больше в логику и посмотрю как лучше сделать.
0
|
||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||||||
| 14.02.2022, 19:59 [ТС] | |||||||
![]() Так что как будет у вас время посмотрите
0
|
|||||||
|
Модератор
|
|||||||||||||
| 15.02.2022, 00:22 | |||||||||||||
|
По идее это нужно сделать при создании страницы в навигаторе. Скорее всего в App. Сейчас покопаюсь, посмотрю как сделать. Добавлено через 2 часа 35 минут Ihave, вы кусками туда коды закидываете, как их использовать? Потратил пару часов пока всё выправил. Закидываете код - делайте так, чтобы Решение можно было запустить. По существу. В App подключаете прослушку к фрейму:
0
|
|||||||||||||
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||
| 15.02.2022, 20:42 [ТС] | |||
|
Обновил реп - закомментировал лишние...
0
|
|||
|
Модератор
|
||
| 15.02.2022, 21:04 | ||
|
Думал залил. Проверю сейчас. Добавлено через 8 минут Ihave, действительно забыл залить. Чтобы не было путаницы и конфликтов с вашими изменениями добавил ветку eldhasp- посмотрите в ней.Что нужно перенесите в основную ветку, а эту удалите.
0
|
||
|
Модератор
|
|
| 15.02.2022, 21:31 | |
|
Ihave, то что я показал это "WPF подход" натянутый на UWP.
Frame+Page не наследуют Контекст Данных от Окна (или вышестоящего элемента). Их применение рассчитано на то, что Page будет использовать только статические значения (в основном из Ресурсов App) и параметр навигации, задаваемый при переходе на страницу. Я показал ещё один способ не типичный для Frame+Page.
0
|
|
|
2 / 1 / 1
Регистрация: 17.11.2020
Сообщений: 105
|
|||
| 15.02.2022, 21:39 [ТС] | |||
![]()
0
|
|||
| 15.02.2022, 21:39 | |
|
Разбор JSON, используя Newtonsoft.Json Моделирование работы РЛС с использованием объектно-ориентированного подхода Использованием навигационного подхода без применения SQL запросов Моделирование работы РЛС с использованием объектно-ориентированного подхода Парсинг json ответа api vk. Вложенность Json Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|