c# – 在Action列表中使用多个Actions

c# – 在Action列表中使用多个Actions,第1张

概述我正在学习更多关于使用ICommand接口以及如何通过我创建的RelayCommand类执行命令. 首先,我对我想要实现的目标进行了一些研究,但是我找不到任何可以帮助我的东西,或者我真的不知道如何搜索我想要做的事情.另外,我对C#理论的了解并不是很好,所以这对我也不利. 基本上我正在尝试将多个动作发送到我的RelayCommand构造函数,然后遍历List< Action< object>>中的所 我正在学习更多关于使用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));
总结

以上是内存溢出为你收集整理的c# – 在Action列表中使用多个Actions全部内容,希望文章能够帮你解决c# – 在Action列表中使用多个Actions所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存