如何将 AlertDialog 与 mvvmcross 集成

本文关键字:mvvmcross 集成 AlertDialog | 更新日期: 2023-09-27 18:36:22

我正在尝试使用android警报对话框向用户显示通知(消息)。我用于项目的模式是MVVM(MVVMCross)。

我正在将我的消息传递给视图模型属性,例如:

private string _messageHeader;
public string MessageHeader
{
    set { _messageHeader = value; }
    get { return _messageHeader = "A test messageaHeader"; }
}
private string _message;
public string Message
{
    set { _message = value; }
    get { return _message = "A test message"; }
}

然后我从视图中调用我的属性并将它们传递给 alertdialog。

  public StockSearchMasterViewModel StockSearchMasterViewModel
    {
        get { return (StockSearchMasterViewModel)base.ViewModel; }
        set { base.ViewModel = value; }
    }

 AlertDialog.Builder builder = new AlertDialog.Builder(this);
 AlertDialog alertDialog = builder.Create();
 alertDialog.SetTitle(StockSearchMasterViewModel.MessageHeader);
 alertDialog.SetMessage(StockSearchMasterViewModel.Message);
 alertDialog.SetButton("OK", (s, ev) => Command.Execute(null));
 alertDialog.SetButton2("Cancel", (s, ev) => alertDialog.Hide());
 alertDialog.Show();
 .
 .
 .

来自视图模型的新消息,新的警报对话框弹出窗口

  alertDialog.SetTitle(StockSearchMasterViewModel.MessageHeader2);
 alertDialog.SetMessage(StockSearchMasterViewModel.Message2);
 alertDialog.SetButton2("OK", (s, ev) => alertDialog.Hide());
 alertDialog.Show();

我在这里试图实现的是当用户在对话框中按 OK 时,ICommand 将在视图模型中执行一个方法,如果某些条件有效或无效,就会有第二条消息。我的问题是第二条消息。我不知道如何再次将其传递给警报对话框,因为警报对话框不会停止主线程到 .Show()(假设因为是一个异步操作)并将一直持续到函数完成其循环。

如何将 AlertDialog 与 mvvmcross 集成

我发现最完整的方法是使用交互请求模式 - 请参阅: MvvmCross 对话框

但是,还有其他方法可用 - 并且更容易遵循 - 特别是使用信使或注入自定义IDialogService界面。有关这些内容的详细信息,请参阅从视图模型到视图显示错误或信息

不要自己滚动,除非你真的想......相反,请使用Allan Ritchie的这个项目。 它有一个易于集成的nuget,效果很好!我已经在MvvmCross中使用了它。 曾经有一个特定于 MvvmCross 的,但它已被弃用,因为这个已经通用化并且适用于 MvvmCross,也可以不使用。

https://github.com/aritchie/userdialogs

https://www.nuget.org/packages/Acr.UserDialogs