RoutedCommand和RelayCommand有什么不同? 何时使用RoutedCommand以及何时在MVVM模式中使用RelayCommand?
请参考Josh Smith的文章WPF Apps与Model-View-ViewModeldevise模式 ,特别是RelayCommand的示例实现(在图3中)。 (无需阅读整个文章的这个问题。) 一般来说,我认为这个实现是非常好的,但是我有一个关于将CanExecuteChanged订阅委托给CommandManager的RequerySuggested事件的问题。 RequerySuggested的文档状态如下: 由于这个事件是静态的,所以它只能作为一个弱引用持有处理程序。 监听这个事件的对象应该对它们的事件处理器保持强有力的引用,以避免垃圾收集。 这可以通过在附加到该事件之前或之后拥有私有字段并将该处理程序指定为值来实现。 然而, RelayCommand的示例实现并不维护订阅的处理程序: public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } 这是否RelayCommand弱引用泄漏到RelayCommand的客户端,要求RelayCommand的用户了解RelayCommand的实现并自行维护一个实时引用? 如果是这样,是否有意义,例如,修改RelayCommand的实现类似于以下内容,以减轻CanExecuteChanged订阅者可能过早的GC: // This event never actually fires. It's purely lifetime mgm't. private event EventHandler canExecChangedRef; public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += […]
我最近在WPF中进行了很多编程,但是我的View和ViewModel在这个时候并不是独立的。 那是部分的 我所有与文本框中的文本,标签内容,datagrid中的列表有关的绑定,都是通过常规属性来完成的,其中包含一个NotifyPropertyChanged事件。 我所有的事件处理button点击或文本更改的东西是通过链接事件。 现在,我想开始使用命令,并find这篇文章: http : //www.codeproject.com/Articles/126249/MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute 。 它有一个如何设置MVVM的解释,但我与RelayCommand混淆。 它做什么工作? 在我的表单中的所有命令是否可用? (a)某些文本框未填写时,如何禁用button? 编辑1: 一个很好的解释是“所有的命令都适用于我的forms吗?” 在这里回答: https : //stackoverflow.com/a/22286816/3357699 这是我到目前为止的代码: https : //stackoverflow.com/a/22289358/3357699
如何在wpf中使用RelayCommand ?