在ViewModel中做什么以及在xaml.cs文件中做什么

本文关键字:什么 cs 文件 xaml ViewModel | 更新日期: 2023-09-27 18:29:36

我正试图通过创建一个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中更改SplitView的打开/关闭状态(SandwitchSplitMenu.IsPaneOpen = !SandwitchSplitMenu.IsPaneOpen;)是否正确,因为这是特定于视图的事情?据我所知,这应该在xaml.cs文件中,因为这是一个特定于视图的东西,但我的一个朋友告诉我,在依赖MVVM时,我应该尽可能少地使用xaml.cs文件。

当我在那里时,应该通过VM或xaml.cs导航帧(MyFrame.Navigate(typeof(SomePage));)吗?框架也是特定于视图的东西。

我知道从模型加载的数据应该通过绑定,通过VM来完成,但我对VM中应该包含什么和xaml.cs文件中应该包含哪些感兴趣。

此外,任何其他好的UWP MVVM教程指南或任何东西都非常受欢迎

在ViewModel中做什么以及在xaml.cs文件中做什么

好吧,有几件事:

  • MVVM模式允许您解耦视图和业务逻辑。有很多优点,其中之一就是测试。你可以在不考虑你的观点的情况下测试你的观点模型,因为它是独立的(你的观点模式没有任何观点意识)。分离关注点也是组织代码的一种很好的做法。

  • 从这一点开始,您应该将代码放在最小代码后面。可接受的代码是专门操纵UI元素的代码,如大小、管理动画等。。。所有与数据和其他内容相关的内容都应该直接进入视图模型。

  • 导航也应该从视图模型中处理,因为逻辑发生在那里,而导航依赖于逻辑。

对于您的IsOpenPane案例,它是有争议的。它操纵UI元素,但我怀疑它是从业务逻辑操纵的。因此,就我个人而言,我会在您的视图模型中声明一个公共属性,您将其绑定到xaml属性IsPaneOpen。

关于UWP MVVM指南,你应该看看MVVM:从开始到结束的教程?。

它并不是专门针对UWP的,资源也很古老,但概念是相同的(只有一些XAML元素不同,但模式和精神完全相同)。

但最重要的是:https://mva.microsoft.com/search/SearchResults.aspx?q=uwp

微软MVA真的很棒

一旦您可以轻松使用XAML和MVVM,请参阅https://dev.windows.com/en-us/design.这是微软关于UWP和设计的官方文档,在这里你可以掌握响应式设计技术等关键概念(这是UWP特有的,并带来了使通用应用程序可用于任何显示器的工具,从物联网到电视)。它当然写得很好,结构也很好。