Как отключить кнопку, привязанную к ICommand текущего элемента, когда текущего элемента нет?

Допустим, у вас есть кнопка, свойство commandкоторой привязано к некоторому ICommandиз текущий элемент некоторой коллекции.

Когда коллекция имеет значение null, кнопка остается включенной, и нажатие на нее кажется недействительным. Вместо этого я хочу, чтобы кнопка оставалась отключенной. Я понял следующее, чтобы кнопки оставались отключенными, когда коллекция равна нулю. Однако это кажется слишком запутанным для чего-то, что можно возможнореализовать более естественным, простым и более похожим на MVVM.

Отсюда вопрос: есть ли более простой способ отключить эту кнопку, в идеале, когда не используется программный код?

.xaml:


.cs:

public class ViewModel : NotificationObject
{
    ObservableCollection _items;

    public DelegateCommand DisabledCmd { get; private set; }

    public ObservableCollection Items { 
        get { return _items; } 
        set { _items = value; RaisePropertyChanged("Items"); } 
    }

    public ViewModel()
    {
        DisabledCmd = new DelegateCommand(DoNothing, CantDoAnything);
    }

    void DoNothing() { }
    bool CantDoAnything()
    {
        return false;
    }
}

Изменить:

Несколько замечаний:

  1. Я знаю, что могу использовать лямбда-выражения, но в этом пример кода у меня нет.
  2. Я знаю, что такое предикат.
  3. Я не понимаю, как что-то сделать с помощью DoSomethingCmd.CanExecuteпоможет, так как нет DoSomethingCmdдля доступа, пока нет текущего элемента.
  4. Итак, я переориентирую свой вопрос: как мне избежать использования DisabledCmd? Я не заинтересован в повышении DoSomethingCmd, так как это не то, что я ищу. Иначе я бы не задавал этот вопрос.

Другое редактирование:

Итак, я в основном принял этот ответ в качестве решения: WPF/MVVM: отключить состояние кнопки, когда ViewModel позади UserControl еще не инициализирован?

Я полагаю, что это именно то, что предлагает Хабарк.

9
задан Community 23 May 2017 в 10:31
поделиться