首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作ICommand和ViewModel

制作ICommand和ViewModel
EN

Stack Overflow用户
提问于 2017-07-23 20:47:58
回答 2查看 54关注 0票数 0

我有C#和UWP应用程序的编程。我使用了一个学习ICommand的视频,但是在这个视频中,我们创建了一个这样的类。你能解释一下这是什么吗?

特别是return _canExecute == null || _canExecute(parameter);是什么意思?因为我在C#编码中没有看到这样的东西。我没有看到这种打字的方法。

代码语言:javascript
复制
class DelegateCommand : ICommand
{
    private Action<object> _execute;
    private Func<object, bool> _canExecute;
    public event EventHandler CanExecuteChanged;

    public DelegateCommand (Action<object> execute, Func<object,bool> canExecute = null)
    {
        if (execute == null)
        {
            throw new ArgumentNullException(nameof(execute));
        }
        _execute = execute;
        _canExecute = canExecute;
    }
    public void  RaiseCanExecuteChanged()
    {
        CanExecuteChanged?.Invoke(this, EventArgs.Empty);
    }
    public bool CanExecute(object parameter)
    {
        return _canExecute == null || _canExecute(parameter);
    }

    public void Execute(object parameter)
    {
        _execute(parameter);
    }
}   

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2017-07-23 21:17:10

代码语言:javascript
复制
return _canExecute == null || _canExecute(parameter);

Return truetrue,或者两个语句的计算结果均为Return。

因此,如果_canExecute函数委托为null,或者对true的函数调用结果为true,则返回true,否则返回false

它是一种基本的逻辑OR操作。

之所以以这种方式编写,是因为如果语句的左侧为真,它会立即返回true,而不计算右侧。如果左侧的计算结果为false,它将只查看右侧。

这是安全的,因为这意味着_canEcevute不是null,因此调用_canEcevute(parameter)是安全的。

票数 2
EN

Stack Overflow用户

发布于 2017-07-23 23:16:40

让我们先来看一下构造函数签名:

代码语言:javascript
复制
DelegateCommand (Action<object> execute, Func<object,bool> canExecute = null)

如您所见,第二个参数canExecute是可选的,其默认值为null。该类的语义如下:通过传递第二个参数(不等于null),您可以声明当且仅当应用于对象的Func<object,bool> canExecute返回true时,Action<object> execute才是可执行的。如果不传递第二个参数,或者将null作为第二个参数传递,则可以声明Action<object> execute总是可以执行的。还请注意,void Execute(object parameter)不会检查bool CanExecute(object parameter)的值,因此您必须自己检查,以避免因参数错误而引发的异常。

现在来看你的问题:这行

代码语言:javascript
复制
return _canExecute == null || _canExecute(parameter);

只是一种较短的写作形式

代码语言:javascript
复制
var tmp = ((_canExecute == null) || (_canExecute(parameter)));
return tmp;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45265276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档