2013-06-20 3 views
2

Я начинаю изучать 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 
     } 
    } 
+1

POLS: Getter должны возвращать 'null', если команда не задана, то не работа Getter, чтобы назначить что-нибудь ... Это сказал я создаю' CanDoSomething (объект cmdState) 'в модели viewmodel и назначить этот метод команде' CanExecute'. –

+1

... это, по сути, то, что вы, кажется, делаете. Просто используйте свойства viewmodel для определения возвращаемого значения :) –

+1

Не уверен, что я следую вашему вопросу. «Как правильно реализовать« CanExecute() »для« RelayCommand »?». Это точно зависит от вашего варианта использования. Сделайте функцию return 'true', если вы хотите разрешить привязку Views к ней иметь возможность выполнить ее, иначе она вернет' false'. Используйте любую логику, необходимую для того, чтобы этот метод возвращал 'bool', чтобы указать, доступен ли связанный' RelayCommand'. Если у вас есть команда, которая всегда возвращает true, вы можете просто игнорировать второй аргумент конструктора 'RelayCommand' при создании. Что-то вроде 'new RelayCommand (ExecuteCommand);' будет делать – Viv

ответ

-2

http://www.identitymine.com/forward/2009/09/using-relaycommands-in-silverlight-and-wpf/

http://matthamilton.net/commandbindings-with-mvvm

http://www.c-sharpcorner.com/UploadFile/1a81c5/a-simple-wpf-application-implementing-mvvm/

bool CanSendStuff(object parameter); 
    // 
    // Summary: 
    //  Defines the method to be called when the command is invoked. 
    // 
    // Parameters: 
    // parameter: 
    //  Data used by the command. If the command does not require data to be passed, 
    //  this object can be set to null. 
    void Execute(object parameter); 
3

команда Declare

public ICommand SaveCommand { get; set; } 

В конструкторе:

public SelectedOrderViewModel() 
    { 
     SaveCommand = new RelayCommand(ExecuteSaveCommand, CanExecuteSaveCommand); 
    } 

Методы:

private bool CanExecuteSaveCommand() 
    { 
     return SelectedOrder.ContactName != null; 
    } 
private void ExecuteSaveCommand() 
    { 
     Save(); 
    }