如何在ViewModel中共享ShowViewModel类

时间:2015-12-03 06:30:08

标签: xamarin xamarin.ios mvvmcross

我正在使用MVVM Cross开发一个Xamarin移动应用程序。有两个ViewModel做同样的事情,即使用下面的代码显示对话框:

var register = await UserDialogHelper.RaiseNotRegisteredAsync (UserDialogs);
        if (register) {
            ShowViewModel<WebViewModel> (new
                {
                    url = Urls.RegisterPage,
                    title = "Register",
                });
        }

我尝试将此代码移动到静态类但无法解析ShowViewModel。任何人都可以建议如何在非viewmodel类中解析ShowViewModel?

2 个答案:

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