Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Relay/ICommand vs DelegateCommand -- Differences

Tags:

c#

wpf

As far as I can tell the below code can be changed from Relay/ICommand Command to Delegate command and still bind the commands the same way! If I am wrong what are the differences and uses of each.

private DelegateCommand something;
public DelegateCommand Something

Here is the full implementation

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);
        }
    }
}
like image 247
KeyboardFriendly Avatar asked Dec 03 '22 23:12

KeyboardFriendly


1 Answers

Neither DelegateCommand nor RelayCommand exist in the framework itself. They are provided by third party libraries.

Both are an implementation of ICommand which works by accepting a delegate and using that to provide the ICommand implementation. As such, both classes have the same intent, and work in basically the same manner.

As for differences - there may be some subtle diffferences, depending on which framework you're using. For example, Prism's DelegateCommand<T> also has a concept of IActiveAware, which is used for building composite commands.

like image 102
Reed Copsey Avatar answered Dec 18 '22 08:12

Reed Copsey