如何在 ViewModel 中共享 ShowViewModel class
How to share ShowViewModel class in ViewModel
我正在使用 MVVM Cross 开发 Xamarin 移动应用程序。有两个 ViewModel 正在做同样的事情,即使用以下代码显示一个对话框:
var register = await UserDialogHelper.RaiseNotRegisteredAsync (UserDialogs);
if (register) {
ShowViewModel<WebViewModel> (new
{
url = Urls.RegisterPage,
title = "Register",
});
}
我尝试将此代码移至静态 class 但无法解析 ShowViewModel。谁能建议如何解决非视图模型中的 ShowViewModel class?
当您有方法或属性可以在相同的 viewmoel 之间共享时。您可以只实现一个基本视图模型。而其他的只是继承自这个基本视图模型。就像下面的例子:
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",
});
}
}
}
然后您的视图模型如下所示:
public class MyFirstViewModel : MyBaseViewModel
{
}
在此 MyFirstViewModel
中,您可以调用基本方法 MyMethod
。等等...
编辑
如果您想从 view/viewmodel 外部导航:查看来自@SergioZgz
的 this answer from Stuart or
ShowViewModel 来自 MvxNavigatingObject,如果您的 class 没有继承它,您将无法使用它。
你可以在 class 中做这样的事情而不是 MvxViewModel:
var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>();
viewDispatcher.ShowViewModel(new MvxViewModelRequest(
vmtype,
parameterBundle,
presentationBundle,
requestedBy));
但我认为 Joehl 的回答是正确的方法:)
我正在使用 MVVM Cross 开发 Xamarin 移动应用程序。有两个 ViewModel 正在做同样的事情,即使用以下代码显示一个对话框:
var register = await UserDialogHelper.RaiseNotRegisteredAsync (UserDialogs);
if (register) {
ShowViewModel<WebViewModel> (new
{
url = Urls.RegisterPage,
title = "Register",
});
}
我尝试将此代码移至静态 class 但无法解析 ShowViewModel。谁能建议如何解决非视图模型中的 ShowViewModel class?
当您有方法或属性可以在相同的 viewmoel 之间共享时。您可以只实现一个基本视图模型。而其他的只是继承自这个基本视图模型。就像下面的例子:
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",
});
}
}
}
然后您的视图模型如下所示:
public class MyFirstViewModel : MyBaseViewModel
{
}
在此 MyFirstViewModel
中,您可以调用基本方法 MyMethod
。等等...
编辑
如果您想从 view/viewmodel 外部导航:查看来自@SergioZgz
的 this answer from Stuart orShowViewModel 来自 MvxNavigatingObject,如果您的 class 没有继承它,您将无法使用它。
你可以在 class 中做这样的事情而不是 MvxViewModel:
var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>();
viewDispatcher.ShowViewModel(new MvxViewModelRequest(
vmtype,
parameterBundle,
presentationBundle,
requestedBy));
但我认为 Joehl 的回答是正确的方法:)