Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于Josh Smith的MVVM问题';s示例应用程序_C#_Wpf_Mvvm_Command - Fatal编程技术网

C# 关于Josh Smith的MVVM问题';s示例应用程序

C# 关于Josh Smith的MVVM问题';s示例应用程序,c#,wpf,mvvm,command,C#,Wpf,Mvvm,Command,我一直在阅读Josh Smith关于MVVM的文章。每一部分对我来说都很有意义,但我很难把它们作为一个连贯的整体来考虑。我有两个问题很有帮助 如果我要构建示例ap,那么构建它的逻辑顺序是什么 对于命令结构,ap运行时会发生什么,以什么顺序 我还想知道我是否应该把这个问题分成两个问题 从你更了解的部分开始。即用户界面或模型。无论如何,您必须在整个MVVM过程中进行多次迭代,以使所有部分都能装配在一起 你的第二个问题对我来说不是很清楚,我想说没有命令仅仅是因为应用程序运行而启动的,一些操作,比如按钮

我一直在阅读Josh Smith关于MVVM的文章。每一部分对我来说都很有意义,但我很难把它们作为一个连贯的整体来考虑。我有两个问题很有帮助

  • 如果我要构建示例ap,那么构建它的逻辑顺序是什么

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

  • 我还想知道我是否应该把这个问题分成两个问题

  • 从你更了解的部分开始。即用户界面或模型。无论如何,您必须在整个MVVM过程中进行多次迭代,以使所有部分都能装配在一起
  • 你的第二个问题对我来说不是很清楚,我想说没有命令仅仅是因为应用程序运行而启动的,一些操作,比如按钮点击触发命令来执行它的操作。此外,每个命令都可以启用/禁用,然后由相应控件的可视状态反映出来。它甚至超出了MVVM和WPF的界限
  • 我同意Yacoder的观点。从你所知道的开始,或者从你的愿景开始。如果您的愿景是获得特定的用户体验,那么如果您愿意,可以从Expression Blend开始。如果您知道需要什么功能,请从ViewModels和单元测试开始

  • Smith的应用程序以App.xaml.cs开始。 此时将创建并显示MainWindowViewModel和MainWIndow

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

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

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

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

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

    当涉及到新客户表单上的保存按钮时。这是从CustomerView.xaml第117行绑定的。转到第196行中的CustomerViewModel SaveCommand属性。它是一个RelayCommand,指向CustomerServiceWModel中的方法。每个customer视图都有其自己的CustomerServiceModel实例,该客户的数据将存放在该实例中。RelayCommand的实例属于这些CustomerServiceWModel,因此每个视图都有自己的SaveCommand。RelayCommand实例的操作和谓词不仅知道它们指向哪些方法和属性,还知道它们指向哪个实例。CustomerViewModel的Save方法仅使用该实例中的数据


    这大概就是为什么两个视图可以有相同类型的按钮,对其各自的客户数据执行相同的操作。

    Josh Smith的文章是MVVM的最佳资源。但是如果你不能直接理解它,你可以考虑阅读任何人都容易理解的地雷。 你能澄清一下关于命令的问题吗?这是一个好奇的问题,还是你有什么问题?我想我要寻找的是当程序被执行以设置命令时会发生什么,当视图被实例化以注册其命令时会发生什么,以及当单击按钮以执行正确的命令时会发生什么。我认为给我带来问题的部分与命令系统如何知道在单击按钮时执行什么有关。如果两个窗口都有一个Save命令,它怎么知道该执行哪一个呢?我现在看到命令给我带来麻烦的地方了,我想只有一个relay命令的实例,这就是我遇到麻烦的地方,我经历了太多年的“线性”编程,旧的思维模式对我来说很难改变。谢谢你的接受。WPF对我来说也很难,20年的用户界面编码打破了它。向别人解释有助于我把问题想清楚,谢谢你给我这个机会。我希望有一种方法可以做出两个正确的答案,谢谢你的帮助,我想将来我会把这样的问题分成两个。