如果我没有从视图中传递任何内容,则以下情况有效。
View.cs
ViewModel.ReloadCommand.Execute(null);
ViewModel.cs
public ICommand ReloadCommand
{
get
{
return new MvxCommand(async () =>
{
await RefreshStudentList();
});
}
}
但是我需要传递一个参数,我想知道我该怎么做?
ViewModel.ReloadCommand.Execute(xxx);
ViewModel.cs
public ICommand ReloadCommand
{
get
{
return new MvxCommand(async () =>
{
await RefreshStudentList(xxx);
});
}
}
答案 0 :(得分:3)
我不熟悉MvvmCross,但据我所知,它会是这样的:
public ICommand ReloadCommand
{
get
{
return new MvxCommand<XXXType>(async (xxx) =>
{
await RefreshRoutesList(xxx);
});
}
}
答案 1 :(得分:2)
要执行异步操作,MvvmCross还有一个MvxAsyncCommand
,它也可以将参数作为常规MvxCommand
。
它看起来像这样:
public ICommand ReloadCommand
{
return new MvxAsyncCommand(DoAsyncStuff);
}
private Task DoAsyncStuff(MyType type)
{
}
任何命令都可以使用如下参数执行:
ViewModel.ReloadCommand.Execute(myParameter);
答案 2 :(得分:0)
请先尝试初始化ViewModel
View
,而不是这样做。然后,根据您的代码,ICommand
仅执行RefreshRoutesList
功能,因此我将直接从RefreshRoutesList
访问View
。为了明确命名,我将使用MyView.cs
和MyViewModel.cs
<强> MyView.cs 强>
MyViewModel vm;
.
.
protected override void OnCreate(Bundle bundle)
{
.... //other stuff
vm = ViewModel as MyViewModel;
}
完成此操作后,您可以使用vm变量,即
在视图中的任何位置调用您的函数await vm.RefreshRoutesList(aParameter);
希望这可以提供帮助。
答案 3 :(得分:0)
您可能正在寻找的答案不是......
我对Mvvm的理解是它反映了View的状态并对View中的命令作出反应。您的参数可以被视为State,因此它应该在ViewModel上具有它将绑定到的自己的Property。因此,您的Command不必传递参数。这也将进一步将ViewModel与View的实现分离。