我正在使用MVVM Cross开发一个Xamarin移动应用程序。有两个ViewModel做同样的事情,即使用下面的代码显示对话框:
var register = await UserDialogHelper.RaiseNotRegisteredAsync (UserDialogs);
if (register) {
ShowViewModel<WebViewModel> (new
{
url = Urls.RegisterPage,
title = "Register",
});
}
我尝试将此代码移动到静态类但无法解析ShowViewModel。任何人都可以建议如何在非viewmodel类中解析ShowViewModel?
答案 0 :(得分:3)
当您在相同的视图集之间共享方法或属性时。您只需实现基本视图模型即可。而其他的只是继承自这个基本的viewmodel。如下例:
public abstract class MyBaseViewModel : MvxViewModel
{
public void MyMethod()
{
// Your code
var register = await UserDialogHelper.RaiseNotRegisteredAsync (UserDialogs);
if (register) {
ShowViewModel<WebViewModel> (new
{
url = Urls.RegisterPage,
title = "Register",
});
}
}
}
然后你的viewmodels看起来像这样:
public class MyFirstViewModel : MyBaseViewModel
{
}
在此MyFirstViewModel
内,您可以调用基本方法MyMethod
。等等...
修改强>
如果您想从视图/视图模型外部导航:请查看来自Stuart的this answer或来自@SergioZgz的the answer here
答案 1 :(得分:0)
ShowViewModel来自MvxNavigatingObject,如果你的类没有继承它,你就不能使用它。
你可以在类中使用这样的东西而不是MvxViewModel:
var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>();
viewDispatcher.ShowViewModel(new MvxViewModelRequest(
vmtype,
parameterBundle,
presentationBundle,
requestedBy));
但我认为Joehl的回答是正确的方法:)