在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;
答案 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);