WPF toplevel MenuItem включить / отключить в зависимости от задачи - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть пункт меню верхнего уровня, который отвечает за обновление сетки данных в том же окне. Мой текущий поток управления:

  1. Пользователь нажимает на обновление
  2. В обработчике события click я:
    1. Отключить пункт меню, установив oMenuItem.IsEnabled = false.
    2. Отправляет действие для обновления сетки, и в этом действии я снова включаю пункт меню, устанавливая IsEnabled = true

Проблема заключается в том, что пользователь может щелкнуть по кнопке «Обновить», даже если он отключен, и все равно, что клики поставлены в очередь. Когда действие возвращается, оно продолжает обрабатывать оставшиеся «поставленные в очередь» щелчки. Я ожидаю, что все клики, пока пункт меню отключен, игнорируются, и только когда он включен, клики подтверждаются.

Странная вещь заключается в том, что если я просто отключаю его и никогда не включаю, он остается таким, то есть отключается.

1 Ответ

1 голос
/ 07 декабря 2010

«Отправлять действие», которое вы имеете в виду, вызывая Dispatcher.BeginInvoke () или какой-либо другой вид асинхронной операции?

В любом случае, в обоих случаях вы можете получить «дескриптор» операции (DispatcherOperation или IAsyncResult) и сохранить его в виде поля при отправке операции. Когда он завершится - установите для этого поля значение null.

В обработчике события click пункта меню отметьте это поле. Если он нулевой, это означает, что можно безопасно начинать операцию. Если он не нулевой - немедленно вернитесь и ничего не делайте.

И что-то не связанное с вашим вопросом, но важное - почему бы не использовать команды? Таким образом, вам не нужно играть с обработкой событий и включением / отключением. И, конечно, команды могут вызываться несколькими способами (например, пользователь выбрал команду из меню, используя клавиатуру, и нажал Enter. Никаких щелчков мышью не требуется, но он должен делать то же самое, что и пункт меню).

Alex.

...