我有一个删除对象命令在我的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();
希望有帮助!