【问题标题】:Passing simple parameters between MVVM Cross ViewModels在 MVVM Cross ViewModels 之间传递简单的参数
【发布时间】: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


    【解决方案1】:

    尝试使用您链接的问题中的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

    【讨论】:

    • 抱歉,看到这个回答我才意识到我只问了半个问题;我在编辑的帖子中突出显示了错误。我在原始问题中遇到的问题是我试图修复该错误
    • 对不起 - 你的问题对我来说太难阅读/理解了。您已经成功调用了RealInit - 所以我猜现在您的问题只是 JSON.Net 序列化问题 - 您应该能够在控制台应用程序中使用 JSON.Net 轻松调试(与ShowViewModel)
    • 你是对的,它是 JSON.NET。我发现了问题,并用详细信息更新了我的问题。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多