Кто-нибудь знает, как я могу заставить CanExecute
вызываться по пользовательской команде (RelayCommand
Джоша Смита)?
Как правило, CanExecute
вызывается всякий раз, когда происходит взаимодействие в пользовательском интерфейсе. Если я что-то нажимаю, мои команды обновляются.
У меня есть ситуация, когда условие для CanExecute
включается / выключается таймером за кулисами. Поскольку это не обусловлено взаимодействием с пользователем, CanExecute
не вызывается, пока пользователь не взаимодействует с пользовательским интерфейсом. Конечным результатом является то, что мой Button
остается включенным / отключенным, пока пользователь не нажмет на него. После клика он обновляется корректно. Иногда Button
появляется включенным, но когда пользователь щелкает, он переключается на отключенный вместо стрельбы.
Как принудительно обновить код, когда таймер изменяет свойство, влияющее на CanExecute
? Я попытался запустить PropertyChanged
(INotifyPropertyChanged
) для свойства, которое влияет на CanExecute
, но это не помогло.
Пример XAML:
<Button Content="Button" Command="{Binding Cmd}"/>
Пример кода позади:
private ICommand m_cmd;
public ICommand Cmd
{
if (m_cmd == null)
m_cmd = new RelayCommand(
(param) => Process(),
(param) => EnableButton);
return m_cmd;
}
// Gets updated from a timer (not direct user interaction)
public bool EnableButton { get; set; }