|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
||||||
Куча суб-окон. Как закрывать их глобально. Одной кнопкой08.01.2025, 15:43. Показов 2761. Ответов 50
Метки нет (Все метки)
Привет всем,
подскажите как технично закрыть все суб-окна одной кнопкой? По отдельности закрываю в Сode Behind соответствующего суб-окна таким образом:
0
|
||||||
| 08.01.2025, 15:43 | |
|
Ответы с готовыми решениями:
50
Подправить RewriteRule для (суб)домена дабы работал глобально
Как добавить несколько файлов одной кнопкой и в одной форме php |
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
||
| 09.01.2025, 20:45 [ТС] | ||
|
Для меня не проблема delegate, event, подписаться. Еще раз повторюсь, проблема - гонять это между VM-мами или VM и СB. И чтобы при этом Элд Хасп, не сильно ругался. ![]() Добавлено через 25 минут Wolfdp, сделал трассировку вашего примера. В самом конце вопрос. не увидел в каком месте оба ваших суб-окна подписаны на событие CloseAll?.Invoke(); ?
0
|
||
|
|
|||||||||
| 09.01.2025, 20:55 | |||||||||
|
И честно говоря, тот факт что нужно тянуть -- не проблема. Фигня в том, что обычно это подразумевает жесткую зависимость, и чем дальше живет и развивается проект, тем больнее всё это сопровождать. В этом случае можно не вводить никакие сервисы и наблюдателей, а просто передавать ссылку на общую модель в окна. Добавлено через 1 минуту
0
|
|||||||||
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
|
| 09.01.2025, 20:57 [ТС] | |
|
вижу.
0
|
|
|
|
|
| 09.01.2025, 20:59 | |
|
P.S. насчет подхода через общий event -- есть подозрение что при оперировании с модальными окнами очень легко наткнуться на дедлок: пинаем общее закрытие с модального окна, ждем отработки подписчиков, а там первый делегат -- главное заблокированное окно, которое ждет пока закроется модальное.
0
|
|
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
||||||
| 09.01.2025, 21:03 [ТС] | ||||||
|
Wolfdp,
опять же, у меня другие суб-окна, по другому вызываются, по другому закрываются. ![]() Я бы не поленился каждое подписать на event. Как перегнать это все из VM в VM или CB?
0
|
||||||
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
||||||||||||
| 09.01.2025, 21:45 [ТС] | ||||||||||||
|
Посмотрю сейчас есть ли минимальный пример с ними. Добавлено через 14 минут Я конечно пример создам. Но пока вот: Открывам так:
Mетод:
Как закрыть экземпляр?
0
|
||||||||||||
|
Модератор
|
||
| 09.01.2025, 21:50 | ||
|
"Суб" подразумевает подчинённость. Раз есть подчинённость, то "хозяин" может либо сам управлять субами (закрыть их), либо передать в него контейнер являющийся инициатором управления (закрытия). Варианты реализации: 1) Одна основная VM, по событию которой надо закрыть все субы. Субы сами решают, что они субы. В этом случае экземпляр mainVM в ресурсах App, субы получают его оттуда и подписываются на нужное событие; 2) Есть множество Окон и у каждого множество своих субов. Как взаимодействует Окно с VM не важно, нужен только механизм управления "своими" субами. Здесь самый простой вариант - это в каждом окне иметь коллекцию своих субов. При открытии суба - экземпляр автоматически записывается в эту коллекцию. При необходимости управления своими субами - оно обращается к коллекции. В субах прописывается логика самоудаления из коллекции при закрытии. Если для установления связи с рордителем используется Owner, то получить всех детей в родителе можно из OwnedWindows . 3) Есть множество Окон и у каждого множество своих субов. Каждый суб должен управляться состоянием VM Окна, но не задействуя само Окно. Здесь самое логичное передать VM в суб при его создании. Можно в конструкторе, можно и в ресурсах суба. Это три основных варианта пришедших в голову.
1
|
||
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
||
| 09.01.2025, 23:21 [ТС] | ||
|
По library: по моему один из ранних релизов. Т.к. App что у нас, уже лет как пять.https://github.com/punker76/Ma... hildWindow
0
|
||
|
Модератор
|
||
| 09.01.2025, 23:40 | ||
MahApps.Metro.SimpleChildWindow?Это же не Окна. Этот класс назвали так для "солидности". Это ContentControl и DataContext он получает от вышестоящего элемента - чаще всего Окна. Metro редко использую и плохо его знаю.
0
|
||
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
|
| 09.01.2025, 23:47 [ТС] | |
|
0
|
|
|
|
|||||||||
| 10.01.2025, 00:10 | |||||||||
|
Добавлено через 15 минут
В целом чхать, логика ровно таже: создаем общего наблюдателя, пинаем Close, подписываемся на public event RoutedEventHandler ClosingFinished чтобы отписаться от общего ивента. Просто вы до этого написали какой-то свой класс для отображения, а теперь хотите через него провернуть всё это (с вероятностью 146% либо отказываться от его использования, либо рефакторить).
0
|
|||||||||
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
|||||||
| 10.01.2025, 00:47 [ТС] | |||||||
0
|
|||||||
|
Модератор
|
|||
| 10.01.2025, 09:04 | |||
|
Поэтому ваши "суб-ОКНА" сбивают с толка. В вашем случае это можно назвать Message Box на основе Content Control или хотя бы сразу уточнить, что это MahApps.Metro.SimpleChildWindow.Если Метро не накосячили (а у них это частое явление), то SimpleChildWindow должен иметь в DataContext то же что и Окно (вы же их непосредственно в Окне открываете?).Покажите XAML и/или Code Behind относящийся к этому вопросу. Возможно, в Метро можно как-то получить все SimpleChildWindow Окна, но не могу точно сказать - надо покопаться.И смутно в памяти, что SimpleChildWindow можно открывать не только в Окне, но в любом его регионе (дочернем UI элементе). Если так то, скорее всего аккумулятора SimpleChildWindow не будет. И тогда, самое логичное, это сделать AP свойство-коллекцию для Окна, в которое будут скидываться все SimpleChildWindow при их открытии. И RoutedCommand которая закрывает все SimpleChildWindow из этого свойства.
0
|
|||
|
|
||||||||||||||||||||||
| 10.01.2025, 10:36 | ||||||||||||||||||||||
|
Berendom, Разберитесь с DI - Dependency Injection. Там сложного ничего нет, но когда разберётесь создание приложений для WPF будет гораздо проще, да и не только в WPF, сервисы мощная и удобная штука, написал один раз и пользуйся в любом проекте.
Добавлено через 1 час 30 минут
0
|
||||||||||||||||||||||
|
|
||
| 10.01.2025, 10:57 | ||
|
- в интерфейсе добавил ивент "закройся" - в code переопределил получение DataContext, чекал наличие интерфейса и подписывался. Не типично, но в целом идея сохраняется -- VM ничего не знает про отображение.
1
|
||
|
-12 / 24 / 4
Регистрация: 22.06.2020
Сообщений: 376
|
||
| 10.01.2025, 11:00 [ТС] | ||
|
Экземпляр, Вызов показаны в #27. Задача: нужно не ломая все остальное, каким-то образом пристроить закрывание всех суб-окон сразу с кнопки, "главного", "материнского", как угодно окна. Там у экземпляра cуб-окна, что создается в СB главного окна (#27) есть метод Сlose(), тот же самый, что используется в CB суб-окна для закрывания себя любимого (#1). Но в СB главного окна этот метод выдает ошибку.
0
|
||
|
|
||
| 10.01.2025, 11:13 | ||
0
|
||
| 10.01.2025, 11:13 | |
|
Как инкрементировать и декрементировать одной кнопкой. Установил IE 9 и после этого стало появляться куча окон 3 последовательных действия одной кнопкой, как сделать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|