gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:50:41 25 4
gpt4 key购买 nike

我正在尝试通过创建 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;) 是否正确,因为这是 View 特定的东西吗?据我所知,这应该在 xaml.cs 文件中,因为它是特定于 View 的东西,但我的一个 friend 告诉我,在依赖 MVVM 时我应该尽可能少地使用 xaml.cs 文件。

当我这样做时,是否应该通过 VM 或 xaml.cs 导航框架 (MyFrame.Navigate(typeof(SomePage));)?框架也是特定于 View 的东西。

我知道从模型加载的数据应该通过 VM 绑定(bind)来完成,但我对应该在 VM 中的内容以及应该在 xaml.cs 文件中的内容很感兴趣。

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

最佳答案

好吧,有几件事:

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

  • 从这里开始,您应该在代码隐藏中放置尽可能最少 的代码。可接受的代码是专门操作 UI 元素的代码,例如调整大小、管理动画,...所有与数据和其他内容相关的代码都应该直接进入您的 View 模型.

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

对于您的 IsOpenPane 案例,它是有争议的。它操纵 UI 元素,但我怀疑它是从业务逻辑操纵的。因此,就我个人而言,我会在您的 View 模型中声明一个公共(public)属性,您将其绑定(bind)到 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,并提供了使通用应用程序可用于从物联网到电视的任何显示器的工具)。它当然写得很好,结构也很好。

关于c# - 在 ViewModel 中做什么以及在 xaml.cs 文件中做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34700954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com