【问题标题】:Xamarin.Forms MVVM getting responce from DIsplayAlertXamarin.Forms MVVM 从 DISplayAlert 获得响应
【发布时间】:2019-03-02 04:55:41
【问题描述】:

如何在 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();
    }

}

然后我从 View Page.cs 调用它:

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

它工作正常,但我不明白如何将一些操作绑定到此警报按钮? 例如。当用户在 Alert 中点击 OK 时,打开新页面。

我应该以某种方式在 ViewModel 内还是在 View 内进行?

【问题讨论】:

    标签: c# xamarin mvvm xamarin.forms


    【解决方案1】:

    你可以在你的视图模型中试试这个

    var res = await App.Current.MainPage.DisplayAlert("Success", "Your data are saved", "Ok", "Cancel");
    
    if(res){//logic} else {//logic}
    

    【讨论】:

    • 通过一些小的修复,它现在可以按预期工作,谢谢!
    【解决方案2】:

    您需要等待用户操作,然后解析结果,如下所示:

    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.xaml.cs) 中,因为它是一个面向接口的方法。
    • 如何将它绑定到我的 ViewModel?我的意思是我现在拥有的类似方式 - vm.DisplayDataSavedPromt。如果我只写DisplayAlert 而不使用 ViewModel,我猜它不会起作用。
    • 为什么要绑定到您的视图模型?结果,您可以简单地更改视图模型中所需的属性。
    • 因为我在 ViewModel 中有逻辑。例如。如果某个参数等于 smth,则调用 DisplayDataSavedPromt。您能否以某种方式扩展您的答案,以便我了解如何正确解决?
    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多