C# Forms-是否可以将SetBinding()lambda参数设置为变量?
在Xamarin表单中,我们在控件上设置绑定,如: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
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代码>