|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
||||||
Предотвратить всплытие выполнения команды привязанной к MouseDoubleClick27.08.2021, 18:06. Показов 13247. Ответов 99
Добрый день, подскажите пожалуйста, как предотвратить всплытие выполнения команды по двойному клику от дочернего выделенного объекта до родительского.
Структура следующая, упростил для кратности
При двойном клике по ItemChild выполняется команда ItemChild.ShowEditDialogCommand, в которой происходит вызов модального окна предназначенного для редактирования ItemChild. По закрытию этого модального окна, происходит автоматическое открытие модального окна у родителя ItemRoot.ShowEditDialogCommand - т.е выполняется команда родителя, хотя я не кликал два раза по родителю Как предотвратить это всплытие выполнения команд ? Даже скажу так, выполняются все команды выделенных объектов, по очереди, хотя кликал я только по одному
0
|
||||||
| 27.08.2021, 18:06 | |
|
Ответы с готовыми решениями:
99
WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп] После выполнения определённой команды не выполняются последующие команды Как предотвратить выполнения функции в определенных случаях? |
|
Модератор
|
||||||||||||||||||
| 21.09.2021, 14:59 | ||||||||||||||||||
Кроме того вы даже не передаёте в Модель данные нужные для внесения изменений. Исключения в Модели тоже не надо проглатывать. Как Пользователь узнает о них? Их нужно или прокидывать до верхнего уровня (то есть оставлять не обработанными), или реализовывать какой канал извещения о них. В Модели должно быть нечто подобное:
Как-то раньше не обратил внимания на это. Она реализована с нарушением паттерна. Суть Репозитория - это инкапсуляция хранилища. Типы отражающие данные хранилища (RootModel и ChildModel) зависимы от используемого хранилища. Поэтому они тоже должны быть инкапсулированы, то есть они должны быть с модификатором internak.Репозиторий и Модель обмениваются между собой либо публичными DTO типами либо Бизнес сущностями. В данном случае это одно и тоже, поскольку в Модели отсутствует Бизнес Логика. Второй нюанс, это асинхронность методов репозитория. Она просто не нужна. Создание асинхронности, если она нужна, лежит на Модели. То есть в Модели должны быть таки методы:
Такое вполне имеет право на жизнь, но реализуется совсем по иному. Добавляете в VM свойство извещающее о загрузке IsLoaded. В методе инициализации коллекций, перед выходом из метода, устанавливаете это свойство в True.
0
|
||||||||||||||||||
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|||
| 21.09.2021, 16:16 [ТС] | |||
|
Далее репозиторий обворачивается в Logic - маппинг Entity в DTO + всякие бизнес логические операции...
0
|
|||
|
Модератор
|
||||||||
| 21.09.2021, 16:55 | ||||||||
|
Тогда лучше в качестве репозитория использовать DbContext. Весь смысл репозитория в инкапсуляции хранилища, а у вас она не происходит. Мапинг в DTO и/или Бизнес Сущности тоже должен происходить внутри репозитория. Это информация уровня приложения. И приложение уже будет решать, что важно или нет. Но суть, в данном случае не в этом. Метод Модели пытается сохранить изменения для указанной сущность. Сама сущность иммутабельна, поэтому нужные для неё изменения передаются отдельно (в данном случае в стринге). И метод Модели должен получить эти данные. Как иначе он их сможет сохранить. Вернуть же метод должен НОВУЮ сущность с уже внесёнными изменениями. А у вас возвращается та же самая сущность. И в ней нет изменений. Если произошла ошибка сохранения, то можно вернуть null или ту же самую сущность. И в методе нет возможности вернуть информацию ещё и об ошибке. Или нужно просто оставить исключение необработанным или возвращать его в ещё одном out параметре. Добавлено через 13 минут Вот пример метода Репозитория:
0
|
||||||||
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|||||||||
| 21.09.2021, 16:59 [ТС] | |||||||||
|
Я пока просто не совсем понимаю архитектуры текущего приложения. Не много сбивает слово Tree, хотя деревьев у меня нет в классическом понимании. Запустить не получается, не могу наблюдать за потоком данных, чтобы разобраться в предложенной вами архитектуре.
0
|
|||||||||
|
Модератор
|
||||
| 21.09.2021, 17:09 | ||||
|
Собираться из них дерево будет уже в представлении. Пока об этом не думайте. На данном этапе нужно реализовать все необходимые для Представления свойства в VM. В том числе свойства-команды и зависимые методы. Добавлено через 4 минуты Это тоже реализация паттерна Репозиторий. Если вводить к нему дополнительной слой, то нужно инкапсулировать не только DBcontext, но и типы которые созданы СПЕЦИАЛЬНО для его работы, то есть RootModel и ChildModel. А обмениваются Репозиторий с Моделью в типах известных Модели: все дефолтные .Net типы (включая кортежи), публичные кастомные типы (в основном DTO значимые или иммутабельные ссылочные) и типы Бизнес Сущностей. Добавлено через 2 минуты В общем случае, репозиторий должен проверять были ли внесены другие изменения в эти записи. Может уже кто-то другой изменил эту запись и её уже не нужно менять?
0
|
||||
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
||
| 21.09.2021, 17:10 [ТС] | ||
|
0
|
||
|
Модератор
|
||
| 21.09.2021, 17:12 | ||
|
Раньше так и делалось. Сейчас чаше используют для этого кортежи. Это делается для того, что скрыть конструктор DTO и тогда создание экземпляров станет возможно только в Репозитории. Но в данном случае это не столь важно.
0
|
||
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|
| 21.09.2021, 17:14 [ТС] | |
|
Сейчас что-то по типу как у метонита в описании про трёх уровневую архитектору приложения
где реализованы первые 2 уровня: Data Access Layer и Business Logic Layer у него репозитории возвращают модели сущности
0
|
|
|
Модератор
|
||
| 21.09.2021, 17:15 | ||
|
Но в данном конвертном, вы разделили Модель, Репозиторий и DBContext, который тоже является Репозиторием. Зачем? Или используйте в Модели DBContext, или если вы его оборачиваете в дополнительный слой, то полностью его инкапсулируйте. А типы RootModel и ChildModel - это часть реализации DBContext. И если вы его инкапсулируете, то и эти типы нужно инкапсулировать.
0
|
||
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|
| 21.09.2021, 17:16 [ТС] | |
|
0
|
|
|
Модератор
|
||
| 21.09.2021, 17:30 | ||
|
Там нет полного изложения "от и до". Берут какой-то конкретный маленький вопрос и разбирают только его не заботясь о том как это согласуется с их же другими статьями. В статье про Репозиторий они пишут об инкапсуляции хранилища. А типы-модели DB-Context отражают данные хранилища и его структуру. По другому просто не будет работать DB-Context. Свой пример они настолько упрощают, что разницы между DTO типами и между этими типами-моделями просто нет. Поэтому они их используют и как DTO типы. Но это неправильно для РЕАЛЬНЫХ приложений и допустимо только в учебных примерах. Добавлено через 2 минуты В их примере (по ссылке) Репозиторий создаётся только "для того что был". Никакой реальной функции он не несёт. И этот пример для реального приложения абсолютно бессмыслен. Добавлено через 2 минуты Гораздо лучше статья из документации: Шаблон репозитория
1
|
||
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|
| 21.09.2021, 21:39 [ТС] | |
|
Элд Хасп, короче понятно...плаваю... буду благодарен примеру на проекте)
0
|
|
|
Модератор
|
|||
| 21.09.2021, 23:58 | |||
|
Если завтра не получится, то послезавтра. Добавлено через 2 часа 6 минут UseMuse, сделал частично для корневых элементов. Посмотрите изменения. Попробуйте по аналогии сделать для дочерних элементов. Фиксация 98b1bcc7:
0
|
|||
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|
| 27.09.2021, 11:12 [ТС] | |
|
0
|
|
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|
| 27.09.2021, 23:03 [ТС] | |
|
Элд Хасп, дальше как? я так понимаю Logic проект не нужен?
0
|
|
|
Модератор
|
|||
| 02.10.2021, 00:41 | |||
|
UseMuse, вы там почти ничего не сделали.
Вы хоть попытайтесь вникнуть в те изменения которые я вношу. Надо было всего лишь по коду для Root сделать аналог кода для Child. Я внёс все изменения. Фиксация 7b95958a:
Фиксация 51121374:
Команды я не стал подключать. Попробуйте сами это реализовать.
0
|
|||
|
Модератор
|
|
| 12.10.2021, 13:57 | |
|
UseMuse, вы по проекту с которого начиналась тема всё закончили?
Вопросов никаких не осталось? Вопросы по другому проекту, лучше задавать в отдельной теме. Эта тема очень сильно разрослась и в ней очень не удобно что искать, вспоминать. У вас то одна тема и вам ghot всё запомнить в ней. А мне это сложно и путает меня. Лучше для вопросов по другому проекту создайте новую тему.
0
|
|
|
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,329
|
|
| 12.10.2021, 14:43 [ТС] | |
|
0
|
|
| 12.10.2021, 14:47 | |||||||
0
|
|||||||
| 12.10.2021, 14:47 | |
|
Вывести результат выполнения команды HELP в текстовый файл так, чтобы у каждой команды был порядковый номер Как предотвратить зависание приложения во время коннекта и выполнения запроса в БД
Написать команды выполнения Ограничение выполнения команды Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|