首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开所选ViewModel的视图

打开所选ViewModel的视图
EN

Stack Overflow用户
提问于 2013-06-10 22:40:11
回答 1查看 1.1K关注 0票数 1

我正在努力寻找正确的方法来做这件事。我有一个包含可观察到的MyViewModel集合的MyCollectionViewModel。我将这个绑定到一个视图MyCollectionView,并选择一个项目,绑定回MyCollectionViewModel中一个名为OpenMyViewCommand的命令。到目前为止一切顺利:

代码语言:javascript
复制
    private MvxCommand<MyViewModel> _openMyViewCommand;
    public ICommand OpenMyViewCommand
    {
        get {
            _openMyViewCommand= _openMyViewCommand?? new MvxCommand<MyViewModel>(OpenMyView);
            return _openSubViewCommand;
        }
    }

现在,当我触摸列表视图中的一项时,它将触发命令并调用方法OpenMyView,将所选的MyViewModel传递给该方法。现在的问题是,无论我如何尝试,似乎都可以让ShowViewModel显示所选模型的视图。我尝试过各种方法,但凭直觉,我希望像这样简单的东西能起作用:

代码语言:javascript
复制
    private void OpenMyView(MyViewModel item) {
                ShowViewModel<MyViewModel > (item);
    }

但是,当然不是这样的。我得到的错误是这样的:

代码语言:javascript
复制
013-06-10 10:46:05.849 MyAppIPhoneUI[51198:c07] mvx: Warning:   5.83 Problem creating viewModel of type MyViewModel - problem MvxException: Failed to resolve parameter for parameter model of type MyModel when creating MyApp.Core.MyViewModel
at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.GetIoCParameterValues (System.Type type, System.Reflection.ConstructorInfo firstConstructor) [0x00042] in /MvvmCross-3/CrossCore/Cirrious.CrossCore/IoC/MvxSimpleIoCContainer.cs:377 
at Cirrious.CrossCore.IoC.MvxSimpleIoCContainer.IoCConstruct (System.Type type) [0x00030] in /MvvmCross-3/CrossCore/Cirrious.CrossCore/IoC/MvxSimpleIoCContainer.cs:266 
at Cirrious.CrossCore.Mvx.IocConstruct (System.Type t) [0x00006] in /MvvmCross-3/CrossCore/Cirrious.CrossCore/Mvx.cs:115 
at Cirrious.MvvmCross.ViewModels.MvxDefaultViewModelLocator.TryLoad (System.Type viewModelType, IMvxBundle parameterValues, IMvxBundle savedState, IMvxViewModel& viewModel) [0x00004] in /MvvmCross-3/Cirrious/Cirrious.MvvmCross/ViewModels/MvxDefaultViewModelLocator.cs:27 

013-06-10 10:24:11.330 MyAppIPhoneUI[50878:c07] mvx: Warning:   6.87 Exception masked MvxException: Failed to load ViewModel for type MyApp.Core.MyViewModel from locator MvxDefaultViewModelLocator
  at Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest request, IMvxBundle savedState, IMvxViewModelLocator viewModelLocator) [0x00023] in /MvxViewModelLoader.cs:46 

知道这是怎么回事吗?我有一个继承自MvxViewController的MyView类,但它没有加载。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-10 22:53:58

导航是通过像Android Intents和WindowsPhone Uris这样的东西来完成的-所以它必须通过可序列化的类型来完成-参见:

尝试将您的代码更改为类似以下内容:

代码语言:javascript
复制
  ShowViewModel<MyViewModel>(new { id = item.Id });

使用如下的接收MyViewModel

代码语言:javascript
复制
  public void Init(int id)
  {
     MyItem = myItemLookupService.Lookup(id);      
  }

此外,请记住,你对你的应用程序的生命周期几乎没有控制-它可能在任何时候被‘墓碑’。因此,不要期望仅仅因为MyViewModel接收到一个导航请求,该请求的项就会一直在内存中-您可能需要重新创建或获取它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17026505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档