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

Xamarin command binding to 2 argument methods

我是新手,对委托和lambda语句还不够熟悉。所以它可能太简单了,但这是我的问题:

我正在尝试通过在 Xamarin 中使用命令绑定来实现带有 2 个参数的异步订阅方法。当我编写如下所示的初始化命令时,代码编辑器显示

Action does not take two arguments

那么如何使用两个参数异步方法进行命令绑定?

//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)
{...}

检查 Command 定义 here

Command(Action) Initializes a new instance of the Command class.

Action class does not take any input arguments:

public delegate void Action();

所以你只能用一个没有参数并且returns什么都没有的方法来实例化它

您可以传递一个模型对象作为参数,它会包含多个参数。

例如:

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; }

}

我找到了一种方法来完成它,传递一个包含所有必要参数的对象。其实@Jiang Jiang 是这么建议的。但我也希望用单行 lambda 表示法对其进行编码。

这是我的解决方案。

        public SubscriptionViewModel()
        {
        subscriptionInfo = new SubscriptionInfo("s01", "payload");

        Subscribe = new Command<SubscriptionInfo>(async (s) => await GetSubscritionsOptsAsync(this.subscriptionInfo));
    ...
    }