在ViewModel中可以做什么以及xaml.cs文件中的内容

时间:2016-01-10 01:19:41

标签: c# .net xaml mvvm uwp

我试图通过创建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教程指南或其他任何内容都非常受欢迎!

1 个答案:

答案 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,并提供可使任何显示器使用的通用应用程序,从物联网到电视的工具)等关键概念。它当然写得很好,结构合理。