Xamarin.Forms - 可以变量化一个SetBinding()lambda参数吗?

时间:2016-05-03 15:59:01

标签: c# lambda xamarin xamarin.forms linq-expressions

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

myLabel.SetBinding<MyViewModel>(Label.TextProperty, viewModel => viewModel.LabelText);

有没有办法将第二个参数(lambda表达式)存储在变量?

基于this answer,我尝试过:

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

但是第二个参数带有错误的红色下划线

  

无法转换为System.Func&#39;至   &#39;&System.Linq.Expressions GT;&#39;

2 个答案:

答案 0 :(得分:2)

是的。在这种情况下,通用source参数的类型为Expression<Func<MyViewModel, string>>,而不是Func<MyViewModel, string>。这两种类型都是以相同的方式初始化,但具有非常不同的含义。有关详细信息,请参阅 Why would you use Expression> rather than Func?

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

答案 1 :(得分:0)

是。你可以与代表一起做。您可以参考此tutorial by MSDN来了解如何执行此操作。如果您用于页面的Viewmodel类的名称是MyViewModel,则可以执行以下操作。

delegate string del(MyViewModel viewModel);
 del myDelegate = x => x * x.LabelString;

然后将myDelegate作为第二个参数传递给绑定语句。

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