【问题标题】:Relay/ICommand vs DelegateCommand -- DifferencesRelay/ICommand 与 DelegateCommand——区别
【发布时间】:2013-06-04 00:08:03
【问题描述】:

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

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);
        }
    }
}

【问题讨论】:

  • 您使用哪些框架来获取您的RelayCommandDelegateCommand 实现?
  • 我认为它们只是实现 WPF 命令的 ICommand 接口。它们被不同的框架使用。你也应该看看这里stackoverflow.com/questions/14180688/…
  • @Reed 框架是4.0
  • @KeyboardFriendly 您使用什么库/参考。这些类型不是 .NET Framework 的一部分,它们是第三方 MVVM“框架”(库)的一部分。
  • 抱歉,正在使用 NuGet 检查新的 MVVM。

标签: c# wpf


【解决方案1】:

DelegateCommandRelayCommand 都不存在于框架本身中。它们由第三方库提供。

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

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

【讨论】:

    猜你喜欢
    • 2012-12-20
    • 2016-10-28
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    相关资源
    最近更新 更多