C# Forms-是否可以将SetBinding()lambda参数设置为变量?

C# Forms-是否可以将SetBinding()lambda参数设置为变量?,c#,lambda,xamarin,xamarin.forms,linq-expressions,C#,Lambda,Xamarin,Xamarin.forms,Linq Expressions,在Xamarin表单中,我们在控件上设置绑定,如: myLabel.SetBinding<MyViewModel>(Label.TextProperty, viewModel => viewModel.LabelText); myLabel.SetBinding(Label.TextProperty,viewModel=>viewModel.LabelText); 有没有办法将第二个参数(lambda表达式)存储在变量中 基于此,我尝试了: Func<MyViewMo

在Xamarin表单中,我们在控件上设置绑定,如:

myLabel.SetBinding<MyViewModel>(Label.TextProperty, viewModel => viewModel.LabelText);
myLabel.SetBinding(Label.TextProperty,viewModel=>viewModel.LabelText);
有没有办法将第二个参数(lambda表达式)存储在变量中

基于此,我尝试了:

Func<MyViewModel, string> myLambda = viewModel => viewModel.LabelText;
myLabel.SetBinding<MyViewModel>(Label.TextProperty, myLambda);
Func myLambda=viewModel=>viewModel.LabelText;
myLabel.SetBinding(Label.TextProperty,myLambda);
但是第二个参数得到了一个带有错误的红色下划线

无法从“System.Func”转换为 “System.Linq.Expressions”


是的。本例中的泛型
source
参数的类型为
Expression
,而不是
Func
。这两种类型都是以相同的方式初始化的,但有非常不同的含义。有关更多详细信息,请参阅

Expression<Func<MyViewModel, string>> myLambda;
myLambda = viewModel => viewModel.LabelText;
myLabel.SetBinding<MyViewModel>(Label.TextProperty, myLambda);
表达myLambda;
myLambda=viewModel=>viewModel.LabelText;
myLabel.SetBinding(Label.TextProperty,myLambda);

是。您可以使用代理来执行此操作。你可以参考这个来学习如何做到这一点。如果用于页面的Viewmodel类的名称为
MyViewModel
,则可以执行类似操作

delegate string del(MyViewModel viewModel);
 del myDelegate = x => x * x.LabelString;
然后将
myDelegate
作为第二个参数传递给binding语句

myLabel.SetBinding<MyViewModel>(Label.TextProperty, myDelegate);
myLabel.SetBinding(Label.TextProperty,myDelegate);

看看这个:啊,一个表达式,好吧,太棒了…现在很明显,对于lambda表达式的返回值,它需要一个对象-
参数3:无法从'Systemlinq.Expressions.Expression'转换为'Systemlinq.Expressions.Expression'
,我只需要将
字符串
参数更改为一个通用的
对象
,因此下面的操作有效:
表达式myExpression=viewModel=>viewModel.LabelText