Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正确使用针对MVVM灯光图标命令的CanExecute_C#_Wpf_Mvvm - Fatal编程技术网

C# 正确使用针对MVVM灯光图标命令的CanExecute

C# 正确使用针对MVVM灯光图标命令的CanExecute,c#,wpf,mvvm,C#,Wpf,Mvvm,我开始学习C语言中的MVVM,我想知道如何在MVVM语言中正确使用ICommand的CanExecute方法。我的WPF应用程序在VS 2012 C#4.5框架中 如何正确实施CanExecute 我刚刚回到了现实,但我知道有一个适当的方法来处理它。也许吧 if(parameter != null) { return true; } 下面是一些示例代码 private RelayCommand sendCommand; public ICommand SendComman

我开始学习C语言中的MVVM,我想知道如何在MVVM语言中正确使用ICommand的CanExecute方法。我的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
       }   
    }

声明命令

public ICommand SaveCommand { get; set; }
在构造函数中:

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

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

POLS:Getter应该返回
null
如果未设置命令,则Getter的任务不是分配任何内容。。。也就是说,我在viewmodel中创建了一个
candomething(object cmdState)
方法,并将该方法分配给命令的
CanExecute
操作……这基本上就是您正在做的事情。只需使用viewmodel的属性来确定返回值:)我不确定是否理解您的问题。“如何为
RelayCommand
正确实施
CanExecute()
?”。这当然取决于您的用例。如果希望允许绑定到该函数的视图能够执行该函数,请使函数return
true
,否则将返回
false
。使用您需要的任何逻辑,使该方法返回
bool
,以指示绑定的
RelayCommand
是否可用。如果您有一个总是返回true的命令,您可以在创建时忽略
RelayCommand
的构造函数的第二个参数。类似于
newrelaycommand(ExecuteCommand)可以吗
private bool CanExecuteSaveCommand()
    {
        return SelectedOrder.ContactName != null;
    }
private void ExecuteSaveCommand()
    {
        Save();
    }