首先,我对我想要实现的目标进行了一些研究,但是我找不到任何可以帮助我的东西,或者我真的不知道如何搜索我想要做的事情.另外,我对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));总结
以上是内存溢出为你收集整理的c# – 在Action列表中使用多个Actions全部内容,希望文章能够帮你解决c# – 在Action列表中使用多个Actions所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)