发布后this question 。我尝试实现描述的基本 View 模型 here 。然而,我似乎仍然看到了问题。我现在已经将基本 View 模型简化为我能想到的最简单的形式:
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 当然无法反序列化为对象
,因为它不知道它应该是什么样子。
最佳答案
尝试使用您链接的问题中的 ShowViewModel
方法:
protected void ShowViewModel<TViewModel>(object parameter)
where TViewModel : IMvxViewModel
{
var text = Mvx.Resolve<IMvxJsonConverter>().SerializeObject(parameter);
base.ShowViewModel<TViewModel>(new Dictionary<string, string>()
{
{ParameterName, text}
});
}
来自Passing complex navigation parameters with MvvmCross ShowViewModel
关于c# - 在 MVVM Cross ViewModel 之间传递简单参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24547410/