我一直在寻找用于跨平台移动开发的 MvvmCross。
由于 View 导航是通过调用 ShowViewModel<>() 完成的,因此如何使用 MvvmCross 在 Windows 8 中创 build 置 Pane (用户控件)?
最佳答案
MvvmCross提供了通用的ShowViewModel<T>
使用 Presenter 在 View
上显示和设置 DataContext 的导航机制s。以这种方式显示的 View 通常覆盖“整个屏幕”,并受益于使用 CIRS 自动构建的 ViewModel(请参阅 http://slodge.blogspot.co.uk/2013/03/v3-new-viewmodel-lifecycle.html )
但是,仅仅因为导航通常是使用 ShowViewModel<T>
完成的这并不妨碍您以其他方式使用 ViewModel。 ShowViewModel<T>
的常见异常(exception)机制包括 iOS Tabbed 和 SplitView 子项、WindowsPhone Pivot/Panorama 项目、Android 子片段和对话框以及 Windows8 子 Pane (例如弹出窗口)。
在 Windows8 中,每个 XAML UserControl 都有一个 DataContext 属性,您可以在代码中设置该属性 - 因此您始终可以:
- 在代码中创建任何 UserControl
- 然后创建一个 ViewModel
- 使用
new
, - 使用
Mvx.IoCConstruct<TViewModel>()
- 或使用
Mvx.Resolve<IMvxViewModelLoader>().LoadViewModel(request, state)
- 使用
- 然后设置用户控件
DataContext
属性(property) - 然后显示用户控件
您在代码中执行此操作的位置...无论您使用页面代码隐藏、某些 Messenger-Message 接收器还是其他某种机制 - 好吧,这取决于您 - 但这是适合放入 UI 代码中的内容项目 - 这绝对是一个 View 问题。
最后一点……虽然设置 Pane 确实是 UserControl
,一个LayoutAwarePage
也是UserControl
太 - 所以你可以使用 LayoutAwarePage
也在弹出窗口中 - 但不要指望看到 OnNavigatedTo
当您这样做时调用 - 例如参见SettingsFlyout
在 http://code.msdn.microsoft.com/windowsapps/App-settings-sample-1f762f49
关于mvvm - 如何将 ViewModel 绑定(bind)到 MvvmCross 中的 Windows 8 设置 Pane ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368013/