如何使用视图模型调用异步命令?

Ala*_*an2 4 xamarin xamarin.forms

我有这个代码,我想将它移动到视图模型中:

resetButton.Clicked += async (sender, e) =>
{
   if (App.totalPhrasePoints < 100 || await App.phrasesPage.DisplayAlert(
                "Reset score",
                "You have " + App.totalPhrasePoints.ToString() + " points. Reset to 0 ? ", "Yes", "No"))
      App.DB.ResetPointsForSelectedPhrase(App.cfs);
};
Run Code Online (Sandbox Code Playgroud)

我意识到我需要设置这样的东西:

在我的XAML代码中;

<Button x:Name="resetButton" Text="Reset All Points to Zero" Command="{Binding ResetButtonClickedCommand}"/>
Run Code Online (Sandbox Code Playgroud)

在我的C#代码中:

private ICommand resetButtonClickedCommand;

public ICommand ResetButtonClickedCommand
{
   get
   {
      return resetButtonClickedCommand ??
      (resetButtonClickedCommand = new Command(() =>
      {

      }));

    }
Run Code Online (Sandbox Code Playgroud)

但是如何将异步操作放入命令中呢?

Mat*_*iba 12

你可以尝试这样的事情:

(resetButtonClickedCommand = new Command(async () => await SomeMethod()));

async Task SomeMethod()
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)


pix*_*xel 9

并扩展已经提供的答案,如果您需要将参数传递给命令,您可以使用类似

(resetButtonClickedCommand = new Command<object>(async (o) => await SomeMethod(o)));

async Task SomeMethod(object o)
{
    // do stuff with received object
}
Run Code Online (Sandbox Code Playgroud)

你也可以用object你想要的任何东西替换上面的东西。