Xamarin.Forms MVVM如何从DisplayAlert中获取响应

3

如何从MVVM视图正确使用DisplayAlert()

我有一些屏幕和对应的ViewModel。 在ViewModel中,我定义了一些Actions

class PageViewModel : INotifyPropertyChanged
{
    public Action DisplayDataSavedPromt;
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    public ICommand SaveCommand { protected set; get; }

    public PageViewModel()
    {
        SaveCommand = new Command(OnSubmit);
    }

    public void OnSubmit()
    {           
        DisplayDataSavedPromt();
    }

}

然后我从视图Page.cs中调用它:

public Page ()
{
    var vm = new PageViewModel();
    this.BindingContext = vm;
    vm.DisplayDataSavedPromt += () => DisplayAlert("Success", "Your data are saved", "OK");
    InitializeComponent ();
}

目前它可以正常工作,但我不知道如何将一些操作绑定到这个警告框的按钮上?例如,当用户在警告框中点击“确定”时,打开新页面。

我应该在ViewModel内部或视图内部进行操作吗?

2个回答

9
你可以在你的视图模型中尝试这个。
var res = await App.Current.MainPage.DisplayAlert("Success", "Your data are saved", "Ok", "Cancel");

if(res){//logic} else {//logic}

现在它已经按预期工作了,感谢您的小修复! - Alex

1
你需要等待用户操作,然后解析结果,就像这样:
var result = await DisplayAlert("Success", "Your data are saved", "Ok", "Cancel"); 

//User pressed OK
if(result == true) 
{
    // do your logic
}
else // User pressed Cancel
{ 
    // do your logic
}

是的,我明白了,但是我应该把它放在哪里?放在View还是ViewModel中? - Alex
在代码后台类(view.xaml.cs)中,由于它是面向接口的方法。 - Bruno Caceiro
我该如何将它绑定到我的ViewModel上?我的意思是现在的方式类似于 vm.DisplayDataSavedPromt。如果我只写 DisplayAlert 而没有ViewModel,那么它应该不会起作用。 - Alex
为什么要绑定到您的视图模型?您可以简单地在结果中更改您想要的视图模型属性。 - Bruno Caceiro
因为我在ViewModel中有逻辑。例如,如果某个参数等于某个值,则调用“DisplayDataSavedPromt”。您能否进一步解释一下您的答案,以便我可以理解如何做得正确? - Alex
@Alex 你可以尝试使用以下代码:var res = await App.Current.MainPage.DisplayAlert("Success", "数据已保存", "确定", "取消"); - hashimks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接