Я использую интерфейс ICommand для привязки пары кнопок в моем приложении, кнопки «Выполнить» и «Закрыть». Я использую вспомогательный метод, который был упомянут в этом вопросе, чтобы подключить ICommand к делегату следующим образом:
_someCommand = new DelegateCommand(this.DoSomething, this.CanDoSomething);
private ICommand _someCommand;
public ICommand SomeCommand
{
get { return _someCommand; }
}
private void DoSomething(object state)
{
// do something here
}
private bool CanDoSomething(object state)
{
// return true/false here is enabled/disable button
}
Кажется, это работает просто отлично, так как в моей реализации CanDoSomething возвращает значение свойства, которое есть в моем приложении.
Если я установлю начальное значение свойства в true, то кнопка будет включена, а в false она отключена.
У меня есть ряд событий, которые вызываются из BackgroundWorker
на уровне приложения обратно в ViewModel, которые изменяют значение свойства на true или false в зависимости от текущего состояния приложения.
Текущая проблема, с которой я сталкиваюсь, заключается в том, что кнопка не «повторно активируется», когда я устанавливаю значение true после завершения работы. Если я щелкну где-нибудь в окне, оно обновится. Поэтому я думаю, что ручное обновление окна решит мою проблему, по крайней мере, на время. Это кажется немного грубым, если я делаю это таким образом, но я немного растерялся из-за того, что еще я мог бы попробовать.
Если у кого-нибудь есть предложения, я весь в ушах.
Спасибо за помощь!
Ian
Редактировать -
Немного больше информации о самом приложении. Он использует фоновый рабочий в потоке приложения для обработки «работы». Приложение представляет собой простую утилиту для управления созданием таблиц и загрузкой данных в таблицы. Мы используем множество предопределенных сценариев SQL для настройки нашей тестовой среды, поэтому это простая утилита, которая позволяет нам делать такие вещи на основе параметров, предоставленных пользователем в пользовательском интерфейсе.
Надеюсь, это поможет, потому что, когда я перечитывал свой вопрос, он читал так, как будто я делал все в потоке пользовательского интерфейса, что не так. Отчеты о ходе выполнения возвращаются обратно в поток пользовательского интерфейса, и все обновляется, как ожидается, кроме кнопки ..