繁体   English   中英

从ViewModel到View Xamarin的MVVMCross调用函数

[英]MVVMCross Calling function from the ViewModel to the View Xamarin

当某人单击按钮时,我想显示一个弹出窗口,该按钮位于从Web服务加载的列表视图中,如何向视图发送消息以调用AlertDialog函数?

我可能不太清楚,我在下面粘贴代码以查看尝试的内容:

在我的视图模型中:

public void editPost(Post item)
{
    PostToEdit = item;

    // Call the popup function
}

在我看来 :

public Dialog showEditPopup()
{
    var customView = LayoutInflater.Inflate(Resource.Layout.EditDialog, null);

    var builder = new AlertDialog.Builder(this);
    builder.SetView(customView);
    builder.SetPositiveButton("Save", SaveClicked);
    builder.SetNegativeButton("Cancel", CancelClicked);

    return builder.Create();  
}

我试图创建一个onclick函数来在视图中初始化我的AlertDialog

var editButton = FindViewById<Button>(Resource.Id.editButton);
editButton.Click += delegate { ShowDialog(EditDialog); }; 

但是应用程序崩溃,因为在oncreate时未加载帖子,因此editButton为null且无法设置事件单击,因此我想在viewmodel中创建弹出窗口。

解决此问题的一种方法是(在视图中)在VM上设置ActionFunc回调,该回调将显示对话框,并且可以从VM启动该对话框。
另一个选择是具有由View将实现的VM定义的接口(例如IViewInteraction ,它具有类似于ShowDialog(string text)

我建议第一种方法。

可能会有多个地方需要在应用程序中显示警报对话框。

在MvvmCross中,有一个插件可以在所有平台上显示对话框。 您实现从视图模型调用它,它将在所有平台上运行。

https://github.com/brianchance/MvvmCross-UserInteraction

我建议您通过NuGet添加它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM