如何将 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()(假设因为是一个异步操作)并将一直持续到函数完成其循环。
我发现最完整的方法是使用交互请求模式 - 请参阅: MvvmCross 对话框
但是,还有其他方法可用 - 并且更容易遵循 - 特别是使用信使或注入自定义IDialogService
界面。有关这些内容的详细信息,请参阅从视图模型到视图显示错误或信息
不要自己滚动,除非你真的想......相反,请使用Allan Ritchie的这个项目。 它有一个易于集成的nuget,效果很好!我已经在MvvmCross中使用了它。 曾经有一个特定于 MvvmCross 的,但它已被弃用,因为这个已经通用化并且适用于 MvvmCross,也可以不使用。
https://github.com/aritchie/userdialogs
https://www.nuget.org/packages/Acr.UserDialogs