我试图通过创建UWP项目来学习MVVM模型。根据我收集的内容,ViewModel应该独立于实际的View(可移植?)。我只想澄清我理解的是否正确。
说我有SplitView
:
<Grid>
...
<Button Click="ActivateRelativePanel Content="CLICK!"/>
<SplitView>
<SplitView.Pane>
...
</SplitView.Pane>
<SplitView.Content>
<Frame Name="MyFrame"/>
</SplitView.Content>
</SplitView>
</Grid>
更改VM或xaml.cs中SandwitchSplitMenu.IsPaneOpen = !SandwitchSplitMenu.IsPaneOpen;
的打开/关闭状态(SplitView
)是否正确,因为这是特定于视图的内容?从我到目前为止的理解,这应该在xaml.cs文件中,因为它是一个特定于视图的东西,但是我的一个朋友告诉我,当依赖MVVM时我应该尽可能少地使用xaml.cs文件
虽然我正在使用它,是否应该通过VM或xaml.cs导航帧(MyFrame.Navigate(typeof(SomePage));
)?框架也是视图特定的东西。
我知道模型中加载的数据应该通过VM进行绑定来完成,但是我对VM内应该是什么以及应该在xaml.cs文件中应该是什么感兴趣。
此外,任何其他优秀的UWP MVVM教程指南或其他任何内容都非常受欢迎!
答案 0 :(得分:2)
嗯,好几件事:
MVVM模式可让您解耦您的视图和业务逻辑。有很多优点,其中之一就是测试。您可以在不考虑视图的情况下测试视图模型,因为它是独立的(您的视图模型没有任何视图意识)。关注点分离也是使代码有条理的一种很好的做法。
从此开始,您应该在代码中放置最小代码。可接受的代码是专门操作UI元素的代码,例如调整大小,管理动画,...所有与数据和其他内容相关的内容应直接进入您的视图模型
还应该从视图模型处理导航,因为逻辑发生在那里,导航依赖于逻辑。
对于您的IsOpenPane案件,它有待商榷。它操纵UI元素,但我怀疑它是从业务逻辑中操纵的。所以,就个人而言,我会在您的视图模型中声明一个绑定到xaml属性IsPaneOpen的公共属性。
关于UWP MVVM指南,您应该看到MVVM: Tutorial from start to finish?。
它并非专门针对UWP而且资源相当陈旧,但概念是相同的(只有一些XAML元素是不同的,但模式和精神完全相同)。
但最重要的是:https://mva.microsoft.com/search/SearchResults.aspx?q=uwp
Microsoft MVA真的非常棒!
一旦您对XAML和MVVM感到轻松,请参阅https://dev.windows.com/en-us/design。它是关于UWP和设计的官方Microsoft文档,您可以在其中掌握响应式设计技术(特定于UWP,并提供可使任何显示器使用的通用应用程序,从物联网到电视的工具)等关键概念。它当然写得很好,结构合理。