我正在努力寻找正确的方法来做这件事。我有一个包含可观察到的MyViewModel集合的MyCollectionViewModel。我将这个绑定到一个视图MyCollectionView,并选择一个项目,绑定回MyCollectionViewModel中一个名为OpenMyViewCommand的命令。到目前为止一切顺利:
private MvxCommand<MyViewModel> _openMyViewCommand;
public ICommand OpenMyViewCommand
{
get {
_openMyViewCommand= _openMyViewCommand?? new MvxCommand<MyViewModel>(OpenMyView);
return _openSubViewCommand;
}
}现在,当我触摸列表视图中的一项时,它将触发命令并调用方法OpenMyView,将所选的MyViewModel传递给该方法。现在的问题是,无论我如何尝试,似乎都可以让ShowViewModel显示所选模型的视图。我尝试过各种方法,但凭直觉,我希望像这样简单的东西能起作用:
private void OpenMyView(MyViewModel item) {
ShowViewModel<MyViewModel > (item);
}但是,当然不是这样的。我得到的错误是这样的:
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类,但它没有加载。
发布于 2013-06-10 22:53:58
导航是通过像Android Intents和WindowsPhone Uris这样的东西来完成的-所以它必须通过可序列化的类型来完成-参见:
尝试将您的代码更改为类似以下内容:
ShowViewModel<MyViewModel>(new { id = item.Id });使用如下的接收MyViewModel:
public void Init(int id)
{
MyItem = myItemLookupService.Lookup(id);
}此外,请记住,你对你的应用程序的生命周期几乎没有控制-它可能在任何时候被‘墓碑’。因此,不要期望仅仅因为MyViewModel接收到一个导航请求,该请求的项就会一直在内存中-您可能需要重新创建或获取它。
https://stackoverflow.com/questions/17026505
复制相似问题