4

ダイアログウィンドウのビューモデル内にcloseコマンドが定義されています。そのビューモデル内に別のコマンドが定義されています。これで、そのコマンドがビューのコントロールにバインドされました。特定のコマンドアクションを実行した後、closecommandを呼び出してウィンドウを閉じたいと思います。それは可能ですか?

4

1 に答える 1

3

はい。他のコマンドの両方(または任意の数)をラップするCompositeCommandを使用できます。これはPrismにあると思いますが、プロジェクトでアクセスできない場合、特にパラメーターを使用していない場合は、同様の機能を自分で実装することはそれほど難しくありません。ICommandを実装するだけです。クラスを使用して、クラス内にICommandのプライベートリストを作成します。

PrismのCompositeCommandクラスの詳細は次のとおりです。

http://msdn.microsoft.com/en-us/library/microsoft.practices.composite.presentation.commands.compositecommand_members.aspx

私自身の確かに短く、おそらく非標準的な実装が続きます。これを使用するには、VMでこれを参照し、代わりにバインドするだけです。実行する他のすべてのコマンドに対して.AddCommandを呼び出すことができます。おそらくPrismの実装は異なりますが、これでうまくいくと思います。

    public class CompositeCommand : ICommand {

    private List<ICommand> subCommands;

    public CompositeCommand()
    {
        subCommands = new List<ICommand>();
    }

    public bool CanExecute(object parameter)
    {
        foreach (ICommand command in subCommands)
        {
            if (!command.CanExecute(parameter))
            {
                return false;
            }
        }

        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        foreach (ICommand command in subCommands)
        {
            command.Execute(parameter);
        }
    }

    public void AddCommand(ICommand command)
    {
        if (command == null)
            throw new ArgumentNullException("Yadayada, command is null. Don't pass null commands.");

        subCommands.Add(command);
    }
}
于 2011-07-06T18:39:36.757 に答える