如何将多个参数传递给MvxCommand?

时间:2017-04-18 20:29:50

标签: mvvmcross

如何将多个参数传递给MvxCommand?例如:

private MvxCommand<int> _addNumbers;
public ICommand AddNumbers
{
    get
    {
        _addNumbers = _addNumbers ?? new MvxCommand<int>(this.OnAddNumbers);
        return _addNumbers;
    }
}

此命令仅需1 int。我需要它拿2。

此外,命令可以返回值吗?

2 个答案:

答案 0 :(得分:3)

我认为您最好的选择是使用Tuple将两个参数转换为单个对象。

    MvxCommand<Tuple<int, int>> _addNumbers;
    public IMvxCommand AddNumbers
    {
        get
        {
            return _addNumbers = _addNumbers ?? new MvxCommand<Tuple<int, int>>(OnAddNumbers);
        }
    }

编辑:至于你的第二个问题:

  

此外,命令可以返回值吗?

MvxCommand是一种类型,而不是一种方法。它不会直接返回任何东西。在您的公开get 属性上执行MvxCommand期间,您可以调用一个单独的方法来返回某些内容,或者在Action内{{1}在你的情况下)你返回。

答案 1 :(得分:1)

我建议使用以下灵活的解决方案:创建DTO类来存储参数,序列化它并传递序列化对象 - 您只需要使用string参数的命令。以下是示例:

`
public class DTO
{ 
   int number1;
   int number2;
}
private MvxCommand<string> _addNumbers;
public ICommand AddNumbers
{
    get
    {
        _addNumbers = _addNumbers ?? new MvxCommand<string>(() =>
        {
             _addNumber = JsonConvert.SerializeObject(new DTO() { number1 = 1, number2 = 2});
        });
        return _addNumbers;
    }
}`

并将其反序列化:

JsonConver.DeserializeObject<DTO>(youSerializedDTO);