|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
Приложение MVVM. VMs и навигация08.02.2023, 19:59. Показов 9716. Ответов 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 и фильтрация по значению свойства (выбрать по производителю) |
|
Модератор
|
|||||||||||||
| 05.03.2023, 21:24 | |||||||||||||
|
Почему-то до этого не сталкивался с таким. Не знаю есть ли какой-то нормальный способ это задавать. Пока используйте такой:
Добавьте все источники в один интерфейс и сделайте одно общее событие изменения. Событие можно даже добавить не в интерфейс источников, а в IShop. Что-то типа типа:
0
|
|||||||||||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||
| 05.03.2023, 21:30 [ТС] | ||
|
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
| 05.03.2023, 21:41 [ТС] | |||
|
Добавлено через 7 минут
0
|
|||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 05.03.2023, 21:52 [ТС] | |
|
0
|
|
|
Модератор
|
||||||||||
| 05.03.2023, 22:59 | ||||||||||
|
Добавлено через 2 минуты В рантайм этого не будет. Можно так же пометить исключение как обработанное, тогда и в дебагере оно не будет останавливать работу:
Создайте его. Как реализовать обработку пунктов - другой вопрос. Может просто добавить в строку ListBox пару кнопок "Удалить" и "Изменить"? Но согласен, там действительно предстоят "танцы с бубном". Поэтому проще кнопки в троке. Это и более привычно, типично для современных GUI.
0
|
||||||||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||||
| 06.03.2023, 13:30 [ТС] | |||||
|
Добавлено через 2 часа 34 минуты
0
|
|||||
|
Модератор
|
|||||
| 06.03.2023, 20:27 | |||||
|
Кроме этого есть ещё разница в некоторых нюансах при запуске приложения на исполнения в Студии - она его запускает в режиме отладки и при запуске экзешника из проводника. По факту мы получаем четыре дефолтных режима: 1) Сборка Debug - запуск Debug в Студии; 2) Сборка Release - запуск Debug в Студии; 3) Сборка Debug - запуск из системы (в проводнике); 4) Сборка Release - запуск из системы. При запуске Debug на поведение приложения могут влиять ещё настройки Студии. В том числе в настройках включается остановка на необработанных исключениях, но которые не обваливают приложение. Обратите внимание на цвет строки при исключении на вашем скрине - он жёлтый. Такой же как на точке останова. И это и есть точка останова, чтобы вы при отладке могли получить информацию об исключении. Но так же как и точки останова, при запуске из системы они не будут ничего останавливать. Вы же пишите за синхронизацию В моём примере же вы видите, что синхронизации не нарушена, но тем не менее CurrentItem сброшен. Вот вы получили в View имя и другие данные для нового продукта. Как вы там в View можете создать IProduct или VM, чтобы передать эти данные в метод Модели? Попробуйте сами это сделать чтобы понять в чём причина.
0
|
|||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||||||||
| 06.03.2023, 21:00 [ТС] | |||||||||
|
Элд Хасп, про отладку всё ясно, спасибо.
0
|
|||||||||
|
Модератор
|
||
| 06.03.2023, 21:36 | ||
|
Если в сущность надо передать 10-20-30 свойств как делать? Или реализация интерфейса или словарь. В общем у каждого способа есть свои плюсы и минусы.
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
| 06.03.2023, 22:10 [ТС] | |||
|
Элд Хасп, я тут заметил, что я сам себе противоречу. Сначала пишу
Добавлено через 7 минут То есть первый подход, о котором я написал, мы использовать не будем из-за тучи параметров, а второй в принципе невозможен. Или возможен? Добавлено через 5 минут Ааа, теперь ясно, почему Вы сделали ProductVM производным от IProduct. Тогда второй подход возможен, на уровне VM будет использоваться ProuctVM, а не Product
0
|
|||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|
| 06.03.2023, 22:11 [ТС] | |
|
0
|
|
|
Модератор
|
||
| 06.03.2023, 22:15 | ||
|
И поэтому не возможно приведение ProuctVM к Product Модели, хоть интерфейс у них и общий. Добавлено через 2 минуты INexteR, на всякий случай напоминаю. Мы делаем "идеальную" и, следовательно, избыточно сложную реализацию. Делаем это с цель обучения. После завершения этой реализации, я буду вам показывать где и как можно "срезать углы". И такую задачу (по функционалу) вы сможете реализовать, когда во всём разберётесь, за несколько часов.
0
|
||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
||||||||||||
| 06.03.2023, 22:26 [ТС] | ||||||||||||
|
Добавлено через 11 минут Ещё я переделал интерфейсы. Увидев, что Вы пишете
Также я перебросил коллекцию товаров из производных интерфейсов в базовые интерфейсы (это не ошибка?)
0
|
||||||||||||
|
Модератор
|
||||
| 06.03.2023, 22:34 | ||||
|
Наверное была какая-то задумка для чего я так сделал, но не помню... Сделал по другому, а промежуточный класс не удалил. Добавлено через 1 минуту Обычно в списке выводится сокращённая информация. А для просмотра детализированной открывается Окно или Страница только с этим товаром. В данной задаче вы это не реализуете, но в типовой такой режим скорее всего был бы. Добавлено через 1 минуту
0
|
||||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
| 06.03.2023, 22:38 [ТС] | |||
|
Добавлено через 2 минуты
0
|
|||
|
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
|
|||
| 06.03.2023, 22:47 [ТС] | |||
|
Добавлено через 2 минуты Добавлено через 2 минуты Приятно было побеседовать с вами. Теперь уж я пойду. Спокойной ночи
0
|
|||
| 06.03.2023, 22:47 | |
|
MVVM первое приложение WPF приложение с паттерном MVVM Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|