【问题标题】:Page with multiple UserControls (and ViewModels)具有多个用户控件(和 ViewModel)的页面
【发布时间】:2013-04-12 18:36:11
【问题描述】:

所以,我有几个页面,每个页面上有几个用户控件。其中一个 UC 出现在每个页面上,并在其构造函数中从 DataService(用作信息存储)中获取信息。

在页面之间切换时,UC 的 ViewModel 构造函数不会被调用,因此它不会从 DataService 更新信息。在创建第一页期间调用一次。

有什么想法吗?我应该只创建一个方法,然后从代码隐藏中调用它吗?或者我可以以某种方式将视图模型的字段绑定到 DataService?

【问题讨论】:

  • 第一次导航到第二页时是否调用了构造函数?应该是,因为当时正在创建 UC,但是当您导航回第一页时,该页面被缓存,因此不调用构造函数。每次导航到页面时都会引发 OnNavigateTo,即使它已被缓存。
  • @igrali 稍微编辑了问题。我的意思是,UC 的 ViewModel 只被调用一次。我应该从每个页面的 OnNavigateTo() 调用 UC.Refresh() 吗?
  • ViewModel 构造函数被调用一次取决于您在哪里创建 VM。如果您在 UC 构造函数或 XAML 中创建它,它会被创建一次,然后被缓存,因此当您返回旧页面时,它不会重新创建。如果你想每次都刷新视图,你应该考虑从 OnNavigatedTo 调用某种刷新方法。只注意刷新不会被调用两次——在构造函数和 OnNavigatedTo 中都
  • @igrali hm.. 也许我应该做一个 UC 事件,并在加载新页面后提出它?我只想让它保持自动化。
  • 对你有用的! :)

标签: windows-phone-7 mvvm-light


【解决方案1】:

好的,答案很简单。只需在求解 SimpleIoc 时传递新参数即可。

SimpleIoc.Default.GetInstance<MainViewModel>((uidHolder++).ToString());

参考(关于 mvvm-light 的 ioc 的一些信息):how to use MVVMLight SimpleIoc?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2015-10-11
    • 2017-03-11
    相关资源
    最近更新 更多