正确使用CanExecute for MVVM Light ICommand

时间:2013-06-20 20:05:43

标签: c# wpf mvvm

我开始在C#中学习MVVM,我想知道如何在MVVM Light中正确使用CanExecute方法进行ICommand。我的WPF应用程序在VS 2012 C#4.5框架中。

如何正确实施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
       }   
    }

2 个答案:

答案 0 :(得分:3)

声明命令

public ICommand SaveCommand { get; set; }

在构造函数中:

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

方法:

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

答案 1 :(得分:-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);