gpt4 book ai didi

c# - 关于 Josh Smith 的示例应用程序的 MVVM 问题

转载 作者:行者123 更新时间:2023-11-30 14:20:02 24 4
gpt4 key购买 nike

我一直在阅读 Josh Smith 关于 MVVM 的文章 http://msdn.microsoft.com/en-us/magazine/dd419663.aspx .每个部分对我来说都很有意义,但我很难在心理上将它们作为一个连贯的单元组合在一起。我有 2 个问题会很有帮助。

  1. 如果我要构建示例 ap,构建它的逻辑顺序是什么?

  2. 对于命令结构,ap 运行时会发生什么,以什么顺序运行?

我也想知道我是否应该将其分成 2 个问题?

最佳答案

  1. 我同意 Yacoder 在这一点上的观点。从您所知道的或您的愿景开始。如果您的愿景是获得特定的用户体验,请根据需要从 Expression Blend 开始。如果您知道自己想要什么功能,请从 ViewModel 和单元测试开始。

  2. Smith 的应用程序以 App.xaml.cs 开头。在那里创建并显示了 MainWindowViewModel 和 MainWIndow。

MainWindow.xaml 是接下来发生的事情。它定义了 UI 的主要部分。主要部分是展示两个系列;命令和工作区。这些是 MainWindowViewModel 的成员。

Smith 似乎喜欢属性来检查它们对应的私有(private)字段是否为空,如果是,则分配它们。因此,“Commands”集合是在 MainWindowViewModel 的第 51 行中创建的,该集合在该行的南面调用 CreateCommands()。

命令类被 RelayCommand 抽象出来,可能是因为在“Show All”或“Create”的情况下,每个命令不需要知道太多。这两个命令的方法在 MainWindowViewModel 中,因为它们在概念上是主窗口的函数。

Commands 集合在主窗口中显示为一个列表,因此它们需要某种可呈现的、用户友好的文本来描述它们。因此,它们被包装在自己的 CommandViewModel 中。

从 MainWindow.xaml 的第 41 行开始,这些命令通过神奇的 XAML 呈现。 HeaderedContentControl 数据绑定(bind)到 Commands 集合,并指定 MainWindowResources.xaml 的 CommandsTemplate(从该文件的第 93 行开始)。该模板使用超链接,其 Command 属性绑定(bind)到 CommandViewModel 的 Command 属性。

当涉及到新客户表单上的“保存”按钮时。这是从 CustomerView.xaml 的第 117 行绑定(bind)到第 196 行的 CustomerViewModel SaveCommand 属性。它是一个指向 CustomerViewModel 中的方法的 RelayCommand。每个客户 View 都有自己的 CustomerViewModel 实例,该客户的数据就存放在该实例中。 RelayCommand 的实例属于那些 CustomerViewModel,因此每个 View 也都有自己的 SaveCommand。 RelayCommand 实例的 Action 和谓词不仅知道它们指向哪些方法和属性,而且知道它们指向哪个实例。 CustomerViewModel 的 Save 方法仅使用来自该实例的数据。

这大致就是两个 View 如何拥有相同类型的按钮,这些按钮对各自的客户数据执行相同的操作。

关于c# - 关于 Josh Smith 的示例应用程序的 MVVM 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1779465/

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