我是新手,对委托和lambda语句不够熟悉。所以这可能太简单了,但我的问题是:
我试图通过在Xamarin中使用命令绑定来实现带有2个参数的异步订阅方法。当我写下如下所示的初始化命令时,代码编辑器说
操作不接受两个参数
那么,我应该如何利用两个参数的异步方法进行命令绑定呢?
//Command initializing line cause an error which says " Action<object> does not take two arguments.
Subscribe = new Command(async (productId,payload) => await SubscribeAsync(productId,payload));
....
public async Task<bool> SubscribeAsync(string productId, string payload)
{...}
您可以将模型对象作为参数传递,并且它可以包含多个参数。
例如:
ICommand SubscribeCommand = new Command((parmaters) => {
var item = (parmaters as CheckItem);
var one = item.productId;
var two = item.payload;
});
CheckItem.cs:
public class CheckItem
{
public string productId { set; get; }
public string payload { set; get; }
}
检查此处的Command
定义
Command(Action(初始化Command类的新实例。
Action
类不接受任何输入参数:
public delegate void Action();
所以你只能用一个不带参数也不返回的方法来实例化它
我找到了一种实现它的方法,传递一个包含所有必要参数的对象。事实上,@小姜是这么建议的。但我也希望用一行lambda表示法对其进行编码。
这是我的解决方案。
public SubscriptionViewModel()
{
subscriptionInfo = new SubscriptionInfo("s01", "payload");
Subscribe = new Command<SubscriptionInfo>(async (s) => await GetSubscritionsOptsAsync(this.subscriptionInfo));
...
}