gpt4 book ai didi

c# - 如何实现不带参数的ICommand

转载 作者:太空狗 更新时间:2023-10-30 00:07:41 25 4
gpt4 key购买 nike

在我的项目中,我想使用 MVVM(和命令)。我已经开始学习 ICommand 的命令和实现。

我想创建不带参数的 ICommand 的实现。(触发数据加载/数据刷新等 - 我不需要任何参数来执行此操作,因此尝试创建不带参数的命令似乎很自然)

这是我正在使用的代码:

using System.Windows.Input;

public class NoParameterCommand : ICommand
{
private Action executeDelegate = null;
private Func<bool> canExecuteDelegate = null;
public event EventHandler CanExecuteChanged = null;

public NoParameterCommand(Action execute)
{
executeDelegate = execute;
canExecuteDelegate = () => { return true; };
}
public NoParameterCommand(Action execute, Func<bool> canExecute)
{
executeDelegate = execute;
canExecuteDelegate = canExecute;
}

public bool CanExecute()
{
return canExecuteDelegate();
}
public void Execute()
{
if (executeDelegate != null)
{
executeDelegate();
}
}
}

但是我遇到了关于没有以正确的方式实现 ICommand 接口(interface)的错误(“XXX.YYYY.NoParameterCommand”未实现接口(interface)成员“System.Windows.Input.ICommand.Execute(object)”)

所以我想改为这样做:

(添加了 CanExecuteExecute 中缺少的参数)

public class NoParameterCommand : ICommand
{
...omitted - no changes here...

public bool CanExecute(object parameter) //here I added parameter
{
return canExecuteDelegate();
}
public void Execute(object parameter) //and here
{
if (executeDelegate != null)
{
executeDelegate();
}
}
}
  1. 这是个好方法吗?
  2. 我应该使用其他方式吗? (如果是,我应该怎么做?)

最佳答案

  1. 这是一个很好的方法。
  2. 不,你不应该使用其他方式。

其他建议:

再次考虑这一点,我会通过引入一个额外的层次结构级别来改进您的体系结构,其中 CanExecute()Execute()抽象 .从该类派生调用委托(delegate)的命令类。

这样,您可以稍后决定是要通过委托(delegate)还是通过对基本命令类进行子类化来为无参数命令提供逻辑。

关于c# - 如何实现不带参数的ICommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19360452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com