Relay/ICommand与DelegateCommand的区别--差异

4
据我所知,下面的代码可以从Relay/ICommand命令更改为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);
        }
    }
}

1
你使用哪些框架来实现RelayCommandDelegateCommand - Reed Copsey
1
我认为它们只是实现ICommand接口来实现WPF命令的。不同的框架会使用它们。此外,你应该看一下这里:https://dev59.com/g2Yq5IYBdhLWcg3wzDvk - Dinesh
@Reed,这个框架是4.0版本。 - KeyboardFriendly
@KeyboardFriendly 你在使用哪些库/引用?那些类型不是.NET Framework的一部分,而是第三方MVVM“框架”(库)的一部分。 - Reed Copsey
抱歉,我正在学习 MVVM,并使用 NuGet。 - KeyboardFriendly
1个回答

17
DelegateCommandRelayCommand在框架本身中不存在,它们是由第三方库提供的。
两者都是ICommand的实现,通过接受委托并使用它来提供ICommand实现。因此,这两个类具有相同的意图,并且基本上以相同的方式工作。
至于差异-根据您使用的框架可能会有一些细微差异。例如,Prism的DelegateCommand<T>还具有IActiveAware的概念,用于构建复合命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接