|
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
|
||||||
Моментальный переход страниц назад/вперед mvvm20.08.2019, 16:47. Показов 3343. Ответов 16
Метки нет (Все метки)
Приложение WPF MVVM.
Многопоточное приложение. Есть проблема, допустим есть 2 кнопки на странице вперед/назад,где после нажатия попадаем на соответствующее окно, но если к примеру нажать много раз назад и уйти пить чай, то можно заметить, как приложение будет отрабатывать 50 раз нажатие кнопок, как это предотвратить, либо сделать моментальным. Например реализация команды назад:
await Navigator.Navigate(new MainStateVM());Добавлено через 1 минуту Может запускать метод Task GoBack() в новой задаче?Добавлено через 14 минут Забавно то, что в дебаге всё летает как надо, а релиз нет( Добавлено через 1 час 9 минут Или чтобы можно было нажать на кнопку только один раз
0
|
||||||
| 20.08.2019, 16:47 | |
|
Ответы с готовыми решениями:
16
Переход страниц назад/вперед Можно ли каким-то образом скрыть кнопки назад, вперед в элементе Frame?
|
|
Модератор
|
||
| 20.08.2019, 17:33 | ||
|
Если так, то вам надо создать какой-то способ перемещения сразу на нужную страницу. Navigator.GoBack();, насколько я понимаю, не позволяет "перепрыгивать" через страницы.Должно быть что-то подобное браузеру. Нажал на стрелку переместился на одну страничку, нажал ПКМ - выбрал из истории на какую именно и перепрыгиваешь на неё.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 21.08.2019, 01:24 | ||
|
Не знаю, что за реализацию асинхронной команды вы используете, но покопайтесь в ее свойствах: возможно, там можно запретить повторный вызов пока команда отрабатывает. Если это ваша собственная реализация, то добавьте соответствующий функционал.
0
|
||
|
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
|
||
| 21.08.2019, 10:10 [ТС] | ||
|
Элд Хасп, Элд Хасп,
Добавлено через 3 минуты kolorotur, Элд Хасп, может проще сделать во вью модели в команде булевую переменную в начале метода - фолс, а по окончании метода к примеру тру и если тру то кнопка становится видимой, а во время выполнении команды будет неактивна, мб так получится? Добавлено через 22 секунды (чисто теоретически )
0
|
||
|
1855 / 1361 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
||
| 21.08.2019, 10:58 | ||
|
0
|
||
|
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
|
|||||||||||
| 21.08.2019, 11:10 [ТС] | |||||||||||
|
novikov.ea, т.е. сделать так , как я написал, а активной её делать в CanExecute(если тру, то видна)?
Добавлено через 10 минут novikov.ea, что-то я туплю) Вы могли бы подсказать, как сделать в этом коде:
0
|
|||||||||||
|
13 / 11 / 5
Регистрация: 14.09.2018
Сообщений: 88
|
||
| 21.08.2019, 11:17 | ||
|
ShmelVG, а если кнопку хакнут? А? Вы не рассматривали такое развитие событий?
Добавлено через 58 секунд Тут хакеры пишут утилиты по активации кнопок! Почему бы не предусмотреть невозможность многократного вызова в коде? Или это обезьяний подход? Добавлено через 1 минуту
0
|
||
|
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
|
||
| 21.08.2019, 11:18 [ТС] | ||
|
QwertyJacksonX,
Покажите пример кода, что вы имеете ввиду?
0
|
||
|
13 / 11 / 5
Регистрация: 14.09.2018
Сообщений: 88
|
||
| 21.08.2019, 11:21 | ||
|
Добавлено через 40 секунд А так в коде напишешь невозможность это сделать даже случайно и сидишь такой гордый, улыбаешься!
0
|
||
|
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
|
||
| 21.08.2019, 11:32 [ТС] | ||
|
QwertyJacksonX, в данном случае у них не будет возможности установить стороннюю утилиту.
Добавлено через 1 минуту QwertyJacksonX, вы знакомы с командой Navigator.GoBack();? У меня не будут проблемы, если злоумышленники теоретически нажимали бы её 100500+ раз
0
|
||
|
1855 / 1361 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
||
| 21.08.2019, 11:46 | ||
|
0
|
||
|
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
|
|
| 21.08.2019, 11:50 [ТС] | |
|
novikov.ea, вы могли бы показать как надо написать(на примере моей команды)? Если я быстро нажимаю 2 раза, команды выполняется 2 раза
0
|
|
|
Модератор
|
||||||||
| 21.08.2019, 11:51 | ||||||||
|
Изначально я подумал, что вам надо сделать сразу переход на последнюю на последнюю страницу. Но, похоже, я вас не правильно понял. Вам нужно просто сделать неактивными кнопки перехода пока не отработала команда перехода. Если так, то попробуйте такой вариант
Пишу здесь в редакторе сообщений - могут быть мелкие ошибки.
1
|
||||||||
|
1855 / 1361 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|||||||
| 21.08.2019, 12:03 | |||||||
1
|
|||||||
|
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
|
|
| 21.08.2019, 12:11 [ТС] | |
|
novikov.ea, Элд Хасп, спасибо, я делал что-то похожее , но эффекта нет((..Я сейчас протестировал, к примеру если дойти до 4 страницы и нажать очень быстро отмену 10 раз, он вернется сначала на 3, потом на 2, потом на 1 (почему-то) на 2. А должен быстро нажать отмену на 4 стр 10 раз и вернуться только на 3 страницу
Добавлено через 25 секунд или это принцип работы самой команды Navigator.GoBack(); ?Добавлено через 1 минуту наверное в моём случае придётся ручками писать вместо данной команды именно переход на нужную страницу по имени, а не с помощью этой команды(
0
|
|
|
Модератор
|
||
| 21.08.2019, 12:22 | ||
|
По-моему, это последствия много поточности. При изменении состояния команды из других потоков может не срабатывать валидация её состояния. Для принудительной валидации в команду надо добавить метод аналогичный Invalidate() в классе релай команд Новая реализация RelayCommand с исправлениями от proa33 и kolorotur.Или перейдите на синхронные команды в котором только в необходимых местах вызываются другие потоки. Ещё есть вариант использовать вместо поля isTransitionProcessing аналогичное свойство к которому привязать IsEnabled кнопок. Для WPF INPC приводится к основному потоку. Но если у вас UWP, то об этом надо позаботиться самостоятельно.
1
|
||
|
Модератор
|
|||||||||||||||||||||
| 21.08.2019, 21:12 | |||||||||||||||||||||
|
ShmelVG, посмотрите демонстрационный пример работы метода Invalidate при использовании асинхронного метода в команде
Если же использовать привязку Button.IsEnabled, то вызов метода Invalidate не нужен
1
|
|||||||||||||||||||||
| 21.08.2019, 21:12 | |
|
Помогаю со студенческими работами здесь
17
Плавный переход страниц во Frame Как сделать случайный переход на одну из диапазона страниц Как можно настроить переход по кнопкам вперед назад на созданной форме? Эксель, настроить переход вперед/назад по таблице при заполении данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|