【发布时间】:2014-07-03 07:20:06
【问题描述】:
在发布this question 之后。我试图实现here 描述的基本视图模型。但是,我似乎仍然看到问题。我现在已经将基本视图模型简化为我能想到的最简单的形式:
public BaseViewModel()
{
Mvx.RegisterType<IMvxJsonConverter, MvxJsonConverter>();
}
protected void ShowViewModel<TViewModel>(object parameter) where TViewModel : IMvxViewModel
{
//var text = Mvx.Resolve<IMvxJsonConverter>().SerializeObject(parameter);
text = "123";
base.ShowViewModel<TViewModel>(text);
}
public void Init(string parameter)
{
if (parameter == null || parameter.Length == 0) return;
//IMvxJsonConverter converter = Mvx.Resolve<IMvxJsonConverter>();
//NavigationParameter deserialized = converter.DeserializeObject<NavigationParameter>(parameter);
//RealInit(deserialized);
}
Init 语句第一行的断点表明没有传入任何内容。但是,如果我重写 InitFromBundle 方法,我会得到一个字典,它会给出正确的对象长度。
很明显,我遗漏了一些关于传递参数的基本知识,但我不知道是什么。
编辑:
我当然错过了原始帖子中我的问题的一些基本内容。我使用这个版本的 ShowViewModel 方法的原因是,当按照链接帖子中的建议实现时,尝试读取值时出现错误:
protected override void RealInit(NavigationParameter parameter)
{
_myParam = (MyParam)parameter.ObjectList["MyParam"];
_myService = (IMyService)parameter.ObjectList["MyService"];
}
错误:
Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'MyApp.PCL.Models.MyModel'.
编辑:
找到问题了。
NavigationParameter 看起来像这样:
public class NavigationParameter
{
public Dictionary<string, object> ObjectList { get; set; }
}
我的想法是创建一个非常通用的参数类,但 JSON.NET 当然不能反序列化为 object,因为它不知道它应该是什么样子。
【问题讨论】:
标签: c# mvvm viewmodel mvvmcross