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