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

1 に答える 1

17

フレームワーク自体にDelegateCommandも存在しません。RelayCommandそれらはサードパーティのライブラリによって提供されます。

どちらもICommand、デリゲートを受け入れ、それを使用して実装を提供することで機能するICommand実装です。したがって、どちらのクラスも同じ意図を持ち、基本的に同じ方法で動作します。

違いについては、使用しているフレームワークによっては、微妙な違いがある場合があります。たとえば、Prismには、複合コマンドの作成に使用されるDelegateCommand<T>の概念もあります。IActiveAware

于 2013-06-07T15:59:40.513 に答える