C#:指挥的增值是多少?

时间:2009-11-03 18:18:47

标签: c# wpf silverlight actionscript-3

在研究flex,as3,silverlight和wpf的MVC框架时,ICommand /命令的常见概念不断出现......任何人都可以解释使用ICommand / Execute()的优势吗?

我没有看到增值的是 - 为什么控制器不能将输入(即:点击事件)映射到模型内部的正确方法?我假设这是因为命令会给你带来一些东西 - 比如从控制器/控制器中的可能事件处理程序中删除业务逻辑。

THX。

3 个答案:

答案 0 :(得分:8)

以下是一些演示值命令添加的案例:

  1. 假设您有一个带有文本框和提交按钮的简单表单。只有在文本框中输入了一些文本时,才需要启用按钮。使用命令,您所要做的就是实现CanExecute方法(根据文本字段中的值返回true或false)框架将相应地自动禁用/启用按钮。使用代码隐藏(或控制器)方法,您必须手动编写代码执行启用/禁用按钮。
  2. 假设您以后决定不喜欢您使用的按钮控件,并决定从不同的库切换到新控件(即按钮或更具异国情调的东西)。您所要做的就是在XAML中进行更改。任何支持Command绑定的控件都知道该怎么做。在代码隐藏方法中,您还要修改按钮单击处理程序(因为新控件可能需要不同的事件处理程序签名)
  3. 假设您稍后决定在文本字段中添加一个复选框,该复选框可直观地向用户指示该字段的内容是否可接受。您所要做的就是将这个新复选框绑定到命令的CanExecute,现在您已经有两个控件可以自动更改其视觉外观,具体取决于表单是否可提交。使用代码隐藏方法(或控制器)添加新控件需要添加更多代码。
  4. 假设您要测试您的操作。由于命令不依赖于任何可视元素,并且不需要它们,因此您可以轻松编写单元测试,无需用户单击任何按钮或输入任何文本。使用控制器方法,您可以模拟控制器的事件,并模拟视图。
  5. <强>综述

    命令在业务逻辑和表示之间提供定义良好的接口。业务逻辑实现者不关心如何在视觉上实现某些动作(例如命令)。他只是提供动作实现和演示文稿查询动作状态的能力。他并不关心特定的UI元素(或多个元素)将触发该操作,执行该操作的确切能力如何反映在UI中,以及UI将来可能会发生什么变化。同时,演示设计师不需要了解有关事件处理程序,控制器等的任何信息。他有一个Command,他将其插入到他选择的任何UI元素(或元素)中,而无需转到C#代码。 。

答案 1 :(得分:1)

你在说什么控制器?

Silverlight和WPF中的命令概念用于将UI(通过大多数绑定)绑定到业务逻辑(无论是控制器/视图模型/模型/等)。

重点是将命令的功能移到UI之外。

实施例。 在应用程序中保存小部件可能总是以相同的方式完成。当然,您可以让用户更改名称,或者更改名称,但总体行为始终是相同的。现在,在您的应用程序中,您可能实际上通过许多不同的UI途径启动保存小部件,例如Page 1在右侧有一个按钮,用于将小部件保存在该页面上,第2页有一个顶部的菜单项将小部件保存在该页面上。用户界面不同,但行为保持不变。

您可以通过使用事件处理(例如抓取按钮上的click事件)来实现相同的目标,但现在您又回到了处理UI特定问题的上下文中。可以说,指挥有一个更清晰的分离。

答案 2 :(得分:1)

简单的答案是命令是可绑定的,而事件则不是。因此,如果您想要响应按钮点击事件,您可以:

  1. 在后面的代码中附加一个事件处理程序。
  2. 创建一个单击命令并将其绑定到ViewModel的命令。
  3. 由于MVVM的目标之一(这是Silverlight和WPF相对于MVC更常见的模式)是分离代码和UI。因此,如果采用第一种方法,最终会在视图中使用代码。如果采用第二种方法,则可以使用命令和绑定从视图中分离代码。