附加行为与路由命令

时间:2010-09-20 13:34:03

标签: wpf

两者之间有什么区别,我对这两个概念非常困惑而且无法正确应用?

2 个答案:

答案 0 :(得分:3)

附加行为是一种扩展控件的方法,而不必对它们进行子类化!例如,在文本框中添加水印,强制文本框仅接受某些字符等等......通过订阅某些事件或设置属性,您可以对控件执行这些操作!通过创建附加行为,您只需封装该函数以便重用!

路由命令是一种抽象执行逻辑的方法,例如单击按钮...在WPF中,ICommand实现的构建,基本上走在可视树中寻找它可以执行的RoutedCommand!这些之间真正的巨大差异在于ICommand只能真正处理像按钮这样的事情......如果你需要在点击图像时执行一些逻辑,你就不能不创建附加行为!

同时阅读RelayCommand / DelegateCommand

<强>更新

  

将行为附加到对象只是意味着使对象做一些它本身不会做的事情。

Josh Smith - http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx

答案 1 :(得分:0)

为了寻找类似的问题,我遇到了Chapter 6 of the PRISM 5.0 Handbook,其中指出了启用命令的控件与行为的说明:

  

支持命令的WPF控件允许您以声明方式将控件连接到命令。当用户以特定方式与控件交互时,这些控件将调用指定的命令。例如,对于Button控件,将在用户单击按钮时调用该命令。与命令关联的此事件是固定的,无法更改。

     

行为还允许您以声明方式将控件连接到命令。但是,行为可以与控件引发的一系列事件相关联,并且它们可以用于在视图模型中有条件地调用关联的命令对象或命令方法。换句话说,行为可以解决许多与启用命令的控件相同的场景,并且它们可以提供更大程度的灵活性和控制。

     

您需要选择何时使用启用命令的控件以及何时使用行为以及要使用的行为类型。如果您希望使用单一机制将视图中的控件与视图模型中的功能相关联或者为了保持一致性,则可以考虑使用行为,即使对于本身支持命令的控件也是如此。

     

如果您只需要使用启用命令的控件来调用视图模型上的命令,并且如果您对调用命令的默认事件感到满意,则可能不需要执行某些操作。同样,如果您的开发人员或UI设计人员不使用Blend for Visual Studio 2013,您可能会支持启用命令的控件(或自定义附加行为),因为Blend行为需要额外的语法。

对我来说,这是行为和命令之间区别的唯一最佳总结。