Почему RoutedCommand не работает с этим кодом?

Код:

public partial class MainWindow : Window
{
    public static readonly RoutedCommand TestRoutedCommand = new RoutedCommand();

    public MainWindow()
    {
        InitializeComponent();


        CommandBinding testCommandBinding = new CommandBinding(TestRoutedCommand, Test_Executed, Test_CanExecute);
        testCommandBinding.PreviewExecuted += Test_PreviewExecuted;

        buttonTest.CommandBindings.Add(testCommandBinding);

        // WHEN I UNCOMMENT THAT LINE, ONLY THE "Preview" MESSAGEBOX IS SHOWN
        //TestRoutedCommand.Execute(null, buttonTest);    
        // Ok, I understood that part here: http://stackoverflow.com/a/4877259/48729
    }

    private void Test_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
    }

    private void Test_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
    {
        MessageBox.Show("Preview");
    }

    private void Test_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        MessageBox.Show("Executed");
    }
}

XAML, это тестовая форма, поэтому есть только эта кнопка:

<Button x:Name="buttonTest" Width="30" Height="30">Test</Button>

Когда я нажимаю кнопку «Тест», ничего не происходит: нет CanExecute, нет PreviewExecuted, нет Executed...

Что не так с этим кодом?


person Click Ok    schedule 18.04.2016    source источник


Ответы (1)


В вашем коде вы создаете CommandBinding, который говорит, как обрабатывать конкретную команду (TestRoutedCommand), но вы не выполняете эту команду (если вы не раскомментируете свою строку). Если вы хотите выполнить его при нажатии кнопки, просто выполните:

buttonTest.Command = TestRoutedCommand;
person Evk    schedule 18.04.2016
comment
Невероятный! Я думал, что buttonTest.CommandBindings.Add(testCommandBinding); было достаточно... Спасибо! - person Click Ok; 18.04.2016