【问题标题】:Init not being called when using ShowViewModel<T> in MVVMCross MvX在 MVVMCross MvX 中使用 ShowViewModel<T> 时未调用 Init
【发布时间】:2014-05-13 17:27:28
【问题描述】:

我在使用 MVVMCross 的 Windows Phone 应用中看到了一些奇怪的现象。

我使用ShowViewModel&lt;MyViewModel&gt;(); 加载正在执行的命令的新视图。

我已将其更改为:

ShowViewModel<MyViewModel>(new { First = "Hello", Second = "World", Answer = 42 });

但是在 MyViewModel 中没有调用 Init,MyViewModel 继承自另一个类,而该类又继承自 MvxViewModel,我什至将两个视图模型更改为直接从 MvxViewModel 继承。

如果我用过:

Mvx.Resolve<IMvxViewModelLoader>().LoadViewModel(MvxViewModelRequest<MyViewModel>.GetDefaultRequest(), null);

Init get 被调用,与 InitFromBundle 相同,我传递了一个包含该测试对象的包,但我没有得到传递的值。

Init 方法看起来像这样:

public void Init(string First, string Second, int Answer)

我完全糊涂了,setup、app.cs 看起来都像导航示例,有什么我可能忘记的想法吗?

Windows 8.1、VS 2013、Hot Tuna、Windows phone 8。


初始化方法:

public void Init()
{
}

public void Init(string First, string Second, int Answer)
{
    // use the values
    var meh = "";
    Mvx.Trace("Init called in {0}", GetType().Name);
}

protected override void InitFromBundle(IMvxBundle bundle)
{

}

【问题讨论】:

  • 是否有任何踪迹告诉您什么可能失败?
  • 无,只是说视图模型已加载,我能做些什么让它更详细?
  • 字面上只看到 mvx:Diagnostc: 7.54 显示 ViewModel MyVewModel,没有错误,用对象正常执行 ShowViewModel,它似乎从来没有使用空构造函数调用 Init,使用与对象匹配的构造函数传入 ShowViewModel 或 InitFromBundle。
  • 我以为您看到的是github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/… - 但如果您没有设置该异常或任何跟踪,那么我不知道。
  • 不,我根本没看到。

标签: windows-phone-8 viewmodel mvvmcross


【解决方案1】:

你应该改用ShowViewModel&lt;NameOfViewModelClass&gt;(new { First = "Hello", Second = "World", Answer = 42 });

【讨论】:

  • 抱歉我的错误,这是我正在使用的,有问题。
  • 它执行得很好,但是 MyViewModel 上没有调用任何 Init 方法。
  • init 方法是否位于您的 ViewModel 类中?
  • 是的,从 Git 中获取 MvX 并使用调试箱来弄清楚现在发生了什么。
  • 因此,在我的 View 背后的代码中,我强烈键入了带有私有 MyViewModel 的 ViewModel、std、public ViewMode,我将该私有设置为 ViewModel 的一个新实例,这会杀死一切。用户错误!我显然无法将其标记为 8 小时的答案,但现在已修复,感谢 Chopper 和 Stuart
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多