Кто-нибудь знает, как я могу заставить CanExecute
получить вызов по пользовательской команде (Josh Smith 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; }