2

我一直在寻找 MvvmCross 用于跨平台移动开发。

由于视图导航是通过调用 ShowViewModel<>() 完成的,那么如何使用 MvvmCross 在 Windows 8 中创建设置窗格(这是一个用户控件)?

4

1 回答 1

3

MvvmCross 提供了一种通用的ShowViewModel<T>导航机制,它使用 Presenter 来显示和设置Views 上的 DataContext。以这种方式显示的视图通常覆盖“整个屏幕”并受益于使用 CIRS 自动构建的 ViewModel(请参阅http://slodge.blogspot.co.uk/2013/03/v3-new-viewmodel-lifecycle.html

然而,仅仅因为导航通常使用ShowViewModel<T>它来完成并不能阻止您以其他方式使用 ViewModel。该机制的常见例外ShowViewModel<T>是 iOS Tabbed 和 SplitView 子项、WindowsPhone Pivot/Panorama 项、Android 子片段和对话框以及 Windows8 子窗格(例如弹出窗口)。


在 Windows8 的实际级别上,每个 XAML UserControl 都有一个 DataContext 属性,您可以在代码中设置该属性 - 因此您始终可以:

  • 在代码中创建任何 UserControl
  • 然后创建一个 ViewModel
    • 使用new,
    • 使用Mvx.IoCConstruct<TViewModel>()
    • 或使用Mvx.Resolve<IMvxViewModelLoader>().LoadViewModel(request, state)
  • 然后设置 UserControlsDataContext属性
  • 然后显示用户控件

您在代码中执行此操作的位置...无论您使用页面代码隐藏、某些 Messenger-Message 接收器还是其他一些机制 - 这取决于您 - 但这是适合放入 UI 代码项目的东西 - 它是绝对是一个视图问题。


最后一个...虽然设置窗格确实是 a UserControl, aLayoutAwarePage也是 a UserControl- 所以你也可以LayoutAwarePage在弹出窗口中使用 - 但不要期望看到OnNavigatedTo调用时调用 - 例如SettingsFlyouthttp: //code.msdn.microsoft.com/windowsapps/App-settings-sample-1f762f49

于 2013-05-04T06:16:49.890 回答