Xamarin命令绑定到2个参数方法



我是新手,对委托和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));
...
}