WPF Включить / отключить элементы управления со страницы, размещенной в главном окне приложения - PullRequest
0 голосов
/ 23 марта 2010

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

В главном окне также есть другое главное меню в верхней части для выполнения других задач.

Когда страница загруженав главном окне и пользователь нажимает кнопку этой загруженной в данный момент страницы, он запускает задачу, которая занимает много времени.Пока выполняется эта длинная задача, я хочу, чтобы пользователь не мог выбрать (или нажать) любую из кнопок в списке, поскольку на загруженной странице длинная задача также обновляет пользовательский интерфейс для этой страницы.Я хотел бы отключить (isEnabled = false) список при выполнении длинной задачи, а не включать его, пока длинная задача не будет завершена.Как я могу это сделать?Я имею в виду, что со страницы, загруженной в данный момент, я хочу отключить список, размещенный в главном окне, являющемся владельцем.

Список не принадлежит текущей загруженной странице.

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 марта 2010

«Правильный» способ сделать это - реализовать пользовательскую команду (ICommand) для вашей кнопки. Затем вы можете установить свойство Command на своей кнопке в качестве вашей пользовательской команды. Пока команда выполняется, т. Е. В методе Execute, вы можете установить для поля _isRunning значение true, а затем в своей реализации CanExecute вы можете вернуть значение на основе _isRunning: например, ...

public class YourButtonCommand : ICommand {</p> <p>...</p> <pre><code>public void Execute { _isRunning = true ... do your window loading here _isRunning = false; } public bool CanExecute(object parameter) { return !_isRunning; }

....

}

WPF позаботится об отключении кнопки, если ваша команда реализована правильно или вы можете реализовать DataTrigger на своем элементе управления, чтобы отключить ее в зависимости от состояния команды. Для получения информации о том, как ваш код команды должен быть реализован, пожалуйста, ознакомьтесь с Статья Джоша Смита MVVM

0 голосов
/ 30 марта 2010

Наконец-то я узнал о том, что делать с Icommand. Потратив много времени, я увидел, насколько мощным он был, и привязал все свои интерактивные элементы управления в том, что меня интересовало, к повторному включению / отключению команд, а команды с canBeExecute возвращают false, когда выполняются длинные задачи (фоновые рабочие) , Я реализовал командный статический класс, чтобы проверить, запущен ли один из фоновых рабочих (длинные задачи), и в него включен один метод, который возвращает true или false в зависимости от того, выполняется ли одна задача. Поэтому в методе canExecuted я проверяю это, обращаясь к методу, помещенному в класс.

Спасибо за хорошую идею!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...