在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 Brand
中View
按钮的命令,这会添加一个委托方法,以便在单击按钮时调用。具体来说,this.ExecuteAddBrand
是要执行的方法。但是,(arg) => true)
的目的是什么?它甚至意味着什么?谢谢!
答案 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
,如果更清楚的话。