我一直在http://msdn.microsoft.com/en-us/magazine/dd419663.aspx浏览Josh Smith关于MVVM的文章。每个部分对我来说都是有意义的,但我很难将其作为一个连贯的单元在精神上进行整合。我有2个问题会帮助很多人。

  • 如果我要构建示例ap,构建它的逻辑顺序是什么?
  • 对于命令结构,运行ap时会以什么顺序发生?

  • 我也想知道是否应该将此分为两个问题?

    最佳答案

  • 我同意Yacoder在这一点上的看法。从您所知道的或您的愿景开始。如果您希望获得特定的UX,则可以从Expression Blend开始。如果知道所需的功能,请从ViewModels和Unit测试开始。
  • Smith的应用程序以App.xaml.cs开头。
    在那里创建并显示了MainWindowViewModel和MainWIndow。

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

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

    命令类由RelayCommand抽象化,可能是因为在“显示全部”或“创建”的情况下,每个命令不需要了解太多。这两个命令的方法在MainWindowViewModel中,因为它们在概念上是主窗口的功能。

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

    从MainWindow.xaml的第41行开始,通过XAML的魔力来显示命令。 HeaderedContentControl数据绑定(bind)到Commands集合,并指定MainWindowResources.xaml的CommandsTemplate(从该文件的第93行开始)。该模板使用HyperLink,其Command属性绑定(bind)到CommandViewModel的Command属性。

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

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

    09-11 06:43