c# - 在 MVVM Cross ViewModel 之间传递简单参数

标签 c# mvvm viewmodel mvvmcross

发布后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/

相关文章:

jsf - 为什么 JSF 被认为是 MVP 而不是 MVVM 框架

wpf - 更改 View 并获取 : grid name cannot be found in the name scope of 'System.Windows.Controls.Grid'

android - 如何将 editText 值传递给 viewModel 和 Livedata (Kotlin)

c# - 找不到 EntityType 异常的映射和元数​​据信息

c# - 当绑定(bind)对象的属性更改时,WPF Caliburn Micro CanExecute

wpf - 当通过DataTemplate应用时,为什么没有代码隐藏我的WPF View 不起作用?

c# - MVC Razor : Helper result in html. 操作链接

c# - 打开SqlConnection "Handle is invalid"错误

c# - c#中的 boolean 聚合模式

c# - 实现撤消/重做的好集合?