在Xamarin中如何在displayalert验证后运行ViewModel命令



我有一个删除对象命令在我的ViewModel中工作。该命令与按钮绑定。到目前为止,一切顺利。当我单击按钮时,对象从数据库中删除。现在,显然,这需要验证,所以我使用DisplayAlert向用户显示"您确定要删除吗?"这是显示的,但是在按钮点击时,项目无论如何都会删除,这是有意义的。我正在努力理解如何只在ViewModel中运行我的命令,如果用户选择"是"。

XAML按钮:

 <Button Text="Delete player" Command="{Binding DeleteCommand}" Clicked="DeletePlayerEvent"></Button>

点击事件:

 private async void DeletePlayerEvent(object sender, EventArgs e)
    {
        bool answer = await DisplayAlert("Notification", "Are you sure you want to delete this player?", "Yes", "No");
        //if (answer == true)??????
       // {
            //Can I run the command from here?
        //}
    }

ViewModel命令

 public Command DeleteCommand
    {
        get
        {
            return new Command(async () =>
            {
                var playerServices = new PlayerServices();
                await playerServices.DeletePlayerAsync(_Player.Id);
            });
        }
    }

这里的问题是您正在同时执行命令绑定和事件订阅。

这两个都是单独被触发的,彼此不依赖。

将它们连接在一起的一种方法是当用户选择"Yes"时从按钮点击事件调用ViewModel的DeleteCommand

获取点击事件中的DeleteCommand属性(假设它写在代码隐藏文件中):

var viewModel = this.BindingContext as YouViewModel
viewModel.DeleteCommand.Execute();

希望有帮助!

最新更新