c# - Relay/ICommand 与 DelegateCommand——区别

标签 c# wpf

据我所知,下面的代码可以从 Relay/ICommand 命令更改为 Delegate 命令,并且仍然以相同的方式绑定(bind)命令!如果我错了,它们的区别和用途是什么。

private DelegateCommand something;
public DelegateCommand Something

这里是完整的实现

private RelayCommand something;
public ICommand Something
{
    get
    {
        if (something == null)
            something = new RelayCommand(SomethingMethod, CanSomething);
        return something;
    }
}

private bool CanSomething(object parameter)
{
    //just for readability return true
    return true;
}

private void SomethingMethod(object parameter)
{
    using (DatabaseContext context = new DatabaseContext())      
    {
        try { }
        catch(Exception ex)
        {
            throw new ApplicationException(string.Format("Something {0} to {1}", file, directory), ex);
        }
    }
}

最佳答案

都不是DelegateCommand也不RelayCommand存在于框架本身。它们由第三方图书馆提供。

两者都是 ICommand 的实现它通过接受委托(delegate)并使用它来提供 ICommand 来工作执行。因此,这两个类具有相同的意图,并且以基本相同的方式工作。

至于差异 - 可能存在一些细微差异,具体取决于您使用的框架。例如,Prism 的 DelegateCommand<T> 还有一个概念 IActiveAware ,用于构建复合命令。

关于c# - Relay/ICommand 与 DelegateCommand——区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16988250/

相关文章:

c# - 在 WPF 应用程序中单击按钮会重置文化

c# - Textblock DataTriggers 未触发

c# - 从异步/等待方法返回列表

wpf - 是否可以覆盖 ItemsPresenter 以使用 Virtualizing StackPanel 而不是常规堆栈面板?

c# - 是否可以将扩展方法添加到类属性以获取与该属性关联的属性的值?

C# - 具有托管服务身份的 Azure 存储

wpf - DataGrid 单元格无效时如何去除红色边框?

c# - 如何在 WPF DataGrid 的列标题中设置垂直文本?

c# - 在 Windows 中覆盖的透明窗口应用程序

c# - 如何将标准差为 1 的逆 CDF 编码转换为不同的 STDDEV?