Могу ли я вызвать команду внутри команды? - PullRequest
3 голосов
/ 06 июля 2011

В моем окне просмотра определена команда close для моего диалогового окна. У меня есть другая команда, определенная внутри этой модели. Теперь, на мой взгляд, эта команда привязана к элементу управления. После выполнения определенных командных действий я хочу, чтобы он вызвал команду closecommand, чтобы закрыть окно. Это возможно?

1 Ответ

2 голосов
/ 06 июля 2011

Да. Вы можете использовать CompositeCommand, который включает обе (или любое число) других ваших команд. Я считаю, что это в Prism, но если у вас нет доступа к этому в вашем проекте, не очень сложно реализовать аналогичную функциональность самостоятельно, особенно если вы не используете параметры - все, что вам нужно сделать, это реализовать ICommand с классом, а затем иметь собственный список ICommands внутри класса.

Подробнее о классе CompositeCommand от Prism:

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

Далее следует моя, по общему признанию, короткая и, возможно, неканоническая реализация. Чтобы использовать его, все, что вам нужно сделать, это сделать ссылку на вашу виртуальную машину, а затем привязаться к ней. Вы можете вызвать .AddCommand для всех других команд, которые вы хотите запустить. Возможно, Prism One реализован по-другому, но я верю, что это сработает:

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