如何在 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 的回答是正确的方法:)