Кто-нибудь знает, как я могу заставить 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; }