Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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#:指挥的附加值是多少?_C#_Wpf_Silverlight_Actionscript 3 - Fatal编程技术网

C#:指挥的附加值是多少?

C#:指挥的附加值是多少?,c#,wpf,silverlight,actionscript-3,C#,Wpf,Silverlight,Actionscript 3,在研究flex、as3、silverlight和wpf的MVC框架时。。。一个常见的ICommand/commanding概念不断出现。。。有人能解释一下使用ICommand/Execute()的好处吗 我看不到增加值的地方是——为什么控制器不能将输入(即:单击事件)映射到模型内部的正确方法?我假设这是因为命令为您带来了一些东西,比如从控制器/控制器中的潜在事件处理程序中删除业务逻辑 Thx.你在说什么控制器 Silverlight和WPF中的指挥概念用于将UI与业务逻辑(无论是控制器/视图模型

在研究flex、as3、silverlight和wpf的MVC框架时。。。一个常见的ICommand/commanding概念不断出现。。。有人能解释一下使用ICommand/Execute()的好处吗

我看不到增加值的地方是——为什么控制器不能将输入(即:单击事件)映射到模型内部的正确方法?我假设这是因为命令为您带来了一些东西,比如从控制器/控制器中的潜在事件处理程序中删除业务逻辑


Thx.

你在说什么控制器

Silverlight和WPF中的指挥概念用于将UI与业务逻辑(无论是控制器/视图模型/模型/等等)绑定在一起(主要通过绑定)

就是要将命令的功能移到UI之外

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


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

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

  • 在代码隐藏中附加事件处理程序
  • 创建单击命令并将其绑定到ViewModel的命令

  • 因为MVVM的目标之一(这是Silverlight和WPF比MVC更常见的模式)是分离代码和UI。因此,如果您采用第一种方法,您最终会在视图中看到代码。如果采用第二种方法,则可以使用命令和绑定将代码与视图分离

    以下几个案例演示了命令添加的值:

  • 假设您有一个带有文本框和提交按钮的简单表单。只有在文本框中输入了某些文本时,才希望按钮处于启用状态。使用命令,您所要做的就是实现CanExecute方法(根据文本字段中的值返回true或false),框架将相应地自动禁用/启用按钮。使用代码隐藏(或控制器)方法,您必须手动编写一个代码do enable/disable按钮
  • 假设稍后您决定不喜欢所使用的按钮控件,并决定从另一个库切换到一个新控件(即按钮或其他更奇特的控件)。您所要做的就是在XAML中进行更改。任何支持命令绑定的控件都知道该做什么。在代码隐藏方法中,您还需要修改按钮点击处理程序(因为新控件可能需要不同的事件处理程序签名)
  • 假设稍后您决定在文本字段中添加一个复选框,该复选框将直观地向用户指示该字段的内容是否可接受。您所要做的就是将这个新复选框绑定到命令的CanExecute,现在您已经有了两个控件,它们将根据表单是否可提交自动更改其视觉外观。对于代码隐藏方法(或控制器),添加新控件将需要添加更多代码
  • 假设您想测试您的操作。由于命令不依赖于任何可视元素,也不需要它们,因此可以轻松编写单元测试,不需要用户单击任何按钮或输入任何文本。使用控制器方法,您可以模拟控制器的事件,并模拟视图 总结


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

    这是一个让你问“是的,为什么每个人都这么做?”的问题,我期待着一个全面的答案……前两个答案对我来说并不令人满意,等待更多+1的明确具体例子来说明为什么指挥是一种好的做法。我自己也使用它,但我经常发现支持它的人给出了一般的理由,却忽略了一个真实例子的价值。