Кнопки выглядят отключенными, пока я что-то не нажму - PullRequest
6 голосов
/ 29 ноября 2010

У меня есть кнопка, привязанная к ICommand

<Button Content="Remove" Command="{Binding RemoveCommand}" x:Name="btnRemove" Visibility="Collapsed" />

После выполнения некоторых задач я сделал кнопку видимой, за исключением того, что они выглядят отключенными, пока я что-то не нажму, почему это так? RemoveCommand выглядит ниже

public ICommand RemoveCommand
{
    get
    {
        if (_removeCommand == null)
        {
            _removeCommand = new RelayCommand(() =>
            {
                if (RemoveRequested != null)
                    RemoveRequested(this, EventArgs.Empty);
            }, () =>
            {
                // CanExecute Callback
                if (Status == WorkStatus.Processing || Status == WorkStatus.Pending)
                {
                    Debug.WriteLine("Returning False" + Status); return false;
                }
                Debug.WriteLine("Returning True"); return true; // After uploads, this returns True, in my Output Window. 
            });
        }
        return _removeCommand;
    }

после загрузки обратный вызов CanExecute возвращает значение True, поэтому кнопка должна быть включена, но она выглядит отключенной, пока я что-то не нажму, почему это происходит?

Видео проблемы

Ответы [ 2 ]

5 голосов
/ 29 ноября 2010

Попробуйте CommandManager.InvalidateRequerySuggested().

Этот метод должен вызывать CanExecute() для команд, и это должно обновить IsEnabled ваших кнопок.

См.http://msdn.microsoft.com/en-us/library/system.windows.input.commandmanager.invalidaterequerysuggested.aspx для получения дополнительной информации.

0 голосов
/ 20 апреля 2016

Если CommandManager.InvalidateRequerySuggested() не выполняет работу, попробуйте навести курсор на элемент управления, содержащий кнопки в подходящее время (MouseEnter, Loaded ...):

//void ParentControl_MouseEnter(object sender, MouseEventArgs e)
void ParentControl_Loaded(object sender, RoutedEventArgs e)
{
    this.Focusable = true;
    this.Focus();
}

Возможно, это несамое элегантное решение, но у меня сработало.

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