Я начинаю изучать MVVM на C#, и мне было интересно, как правильно использовать метод CanExecute для ICommand в MVVM Light. Мое приложение WPF находится в VS 2012 C# 4.5.Правильное использование CanExecute для MVVM Light ICommand
Как правильно реализовать CanExecute?
Я только что вернулся, но я знаю, что есть правильный способ справиться с этим. Возможно
if(parameter != null)
{
return true;
}
Вот пример кода примера.
private RelayCommand sendCommand;
public ICommand SendCommand
{
get
{
if (sendCommand == null)
sendCommand = new RelayCommand(p => SendStuffMethod(p), p => CanSendStuff(p));
return sendCommand;
}
}
private bool CanSendStuff(object parameter)
{
return true;
}
private void SendStuffMethod(object parameter)
{
string[] samples = (string[])parameter;
foreach(var sample in samples)
{
//Execute Stuff
}
}
POLS: Getter должны возвращать 'null', если команда не задана, то не работа Getter, чтобы назначить что-нибудь ... Это сказал я создаю' CanDoSomething (объект cmdState) 'в модели viewmodel и назначить этот метод команде' CanExecute'. –
... это, по сути, то, что вы, кажется, делаете. Просто используйте свойства viewmodel для определения возвращаемого значения :) –
Не уверен, что я следую вашему вопросу. «Как правильно реализовать« CanExecute() »для« RelayCommand »?». Это точно зависит от вашего варианта использования. Сделайте функцию return 'true', если вы хотите разрешить привязку Views к ней иметь возможность выполнить ее, иначе она вернет' false'. Используйте любую логику, необходимую для того, чтобы этот метод возвращал 'bool', чтобы указать, доступен ли связанный' RelayCommand'. Если у вас есть команда, которая всегда возвращает true, вы можете просто игнорировать второй аргумент конструктора 'RelayCommand' при создании. Что-то вроде 'new RelayCommand (ExecuteCommand);' будет делать – Viv