c# – 在Action列表中使用多个Actions
发布时间:2020-12-15 23:41:15 所属栏目:百科 来源:网络整理
导读:我正在学习更多关于使用ICommand接口以及如何通过我创建的RelayCommand类执行命令. 首先,我对我想要实现的目标进行了一些研究,但是我找不到任何可以帮助我的东西,或者我真的不知道如何搜索我想要做的事情.另外,我对C#理论的了解并不是很好,所以这对我也不利.
我正在学习更多关于使用ICommand接口以及如何通过我创建的RelayCommand类执行命令.
首先,我对我想要实现的目标进行了一些研究,但是我找不到任何可以帮助我的东西,或者我真的不知道如何搜索我想要做的事情.另外,我对C#理论的了解并不是很好,所以这对我也不利. 基本上我正在尝试将多个动作发送到我的RelayCommand构造函数,然后遍历List< Action< object>>中的所有动作.收集并逐一执行.这是我的代码: RelayCommand类构造函数 public RelayCommand(Predicate<object> canExecute,List<Action<object>> actions) { _canExecute = canExecute; foreach (var action in actions) _execute = action; } 然后我的ViewModel中的命令属性 private ICommand _updateExternals; public ICommand UpdateExternals { get { if (_updateExternals == null) { _updateExternals = new RelayCommand( x => CanExecute,Updater.UpdateExternals(this));//Here is where I am stuck } return _updateExternals; } } 我知道,从其他示例来看,如果我只需要传递一个Action而不是一个Actions列表,那么代码将如下所示:x => Updater.UpdateExternals(本));它会工作,但只要我有一个动作列表作为参数我就会卡住. 所以,如果您还没有猜到,我的问题是:如何通过多个动作发送到我的RelayCommand类? 任何正确方向的帮助将不胜感激,谢谢! 编辑:这是我完整的RelayCommand类,可以更好地了解我在做什么. public class RelayCommand : ICommand { private Predicate<object> _canExecute; private Action<object> _execute; public RelayCommand(Predicate<object> canExecute,List<Action<object>> actions) { _canExecute = canExecute; foreach (var action in actions) _execute = action; } public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } public bool CanExecute(object parameter) { return _canExecute(parameter); } public void Execute(object parameter) { _execute(parameter); } } 解决方法
要解决您的问题,请在构造函数中使用params:
public class RelayCommand : ICommand { private Predicate<object> _canExecute; private Action<object>[] _execute; public RelayCommand(Predicate<object> canExecute,params Action<object>[] actions) { _canExecute = canExecute; _execute = actions; } public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } public bool CanExecute(object parameter) { return _canExecute(parameter); } public void Execute(object parameter) { foreach (var action in _execute) action(parameter); } } 然后你可以像往常一样创建这样的命令: _updateExternals = new RelayCommand( x => CanExecute,x => Updater.UpdateExternals(this));//Here is where I am stuck 当您需要传递多个动作时: _updateExternals = new RelayCommand( x => CanExecute,x => Updater.UpdateExternals(this),x => Updater.DoSomethingElse(this)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |