WPF的目的是`(arg)=>真)`

时间:2014-10-31 10:33:09

标签: c# wpf mvvm

在DataTemplate中的Command Binding上阅读this tutorial时,我看到了:

public DelegateCommand<string> AddBrand
{
    get
    {
        return this.addBrand ?? (this.addBrand = new DelegateCommand<string>( this.ExecuteAddBrand, (arg) => true));
    }
}

这是BrandsViewModel.cs内部添加品牌的功能。我对以下这一行有疑问:

this.addBrand = new DelegateCommand<string>( this.ExecuteAddBrand, (arg) => true));

我的理解是AddBrand是注册到Add BrandView按钮的命令,这会添加一个委托方法,以便在单击按钮时调用。具体来说,this.ExecuteAddBrand是要执行的方法。但是,(arg) => true)的目的是什么?它甚至意味着什么?谢谢!

2 个答案:

答案 0 :(得分:3)

当我们想要编写lambda表达式时,使用运算符=>

你可以认为它是一种常规方法,其中留给=>的东西是方法的参数(输入),而=>是方法返回的东西(输出) )。

例如

x=>x*x

如果输入3,我们将得到输出9。

Lambda表达式在LINQ中非常有用。

例如,假设我们有一个名为customers的{​​{1}}类型的对象集合,其定义如下:

Customer

那么我们想让年龄超过18岁的客户接下来。然后我们可以这样做:

public class Customer
{
    public string FirstName {get; set; }
    public string LastName {get; set; }
    public int Age {get; set;}
}

但是,我们也可以得到相同的结果,如下所示:

var adults = from customer in customers
             where customer.Age>18
             select customer;

在后一种情况下,我们将var adults = customers.Where(x => x.Age>18); 方法传入lambda表达式。

  

(arg)=&gt;的目的是什么?真正)?它甚至意味着什么?

现在,在您的情况下,上面的lambda接受一个名为Where的参数,并始终返回arg

答案 1 :(得分:2)

这是一个lambda,表示接受一个参数的方法(或表达式),无论输入如何,都始终返回true。 &#34;给定string arg,返回true&#34;。

列表上可能有一个更清晰的例子:

var names = List<string>(...); // populate, etc
var containsA = names.FindAll(x => x.Contains("A"));

在上面,我使用lambda来表达一个&#34;谓词&#34; - 基本上是过滤条件;对于任何名称,如果名称包含A,则返回true。FindAll返回与谓词匹配的所有项。我们也可以这样做:

var everybody = names.FindAll(x => true);
var nobody = names.FindAll(x => false);

(虽然这显然有点傻)

更具体到DelegateCommand:基本上,第二个参数是canExecuteMethod,它基本上是说&#34;是的,它总是可以执行,无论值是什么&#34;。在更一般的情况下,这可以作为过滤器何时适合使用该方法。 canExecuteMethod参数也可以省略或传递为null,如果更清楚的话。