2

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

我将消息传递给 viewmodel 属性,例如:

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"; }
}

然后我从视图中调用我的属性并将它们传递给警报对话框。

  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();
 .
 .
 .

来自 viewmodel 的新消息,新的 alertdialogpopup

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

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

4

2 回答 2

2

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

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

于 2013-10-21T08:39:20.150 回答
2

不要自己动手,除非你真的想……相反,使用 Allan Ritchie 的这个项目。它有一个易于集成的 nuget,而且效果很好!我已经将它与 MvvmCross 一起使用。曾经有一个特定于 MvvmCross 的,但它已被弃用,因为这个已经被推广并且可以与 MvvmCross 一起使用,也可以不使用。

https://github.com/aritchie/userdialogs

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

于 2016-06-30T21:24:23.483 回答