[英]How to Update View from ViewModel using MVVMCross and Xamarin.Android
[英]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上设置Action
或Func
回调,该回调将显示对话框,并且可以从VM启动该对话框。
另一个选择是具有由View将实现的VM定义的接口(例如IViewInteraction
,它具有类似于ShowDialog(string text)
。
我建议第一种方法。
可能会有多个地方需要在应用程序中显示警报对话框。
在MvvmCross中,有一个插件可以在所有平台上显示对话框。 您实现从视图模型调用它,它将在所有平台上运行。
https://github.com/brianchance/MvvmCross-UserInteraction
我建议您通过NuGet添加它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.