Привязки команд WPF - как добраться до обработчиков событий

Привет Есть ли способ выбрать, где XAML должен использовать обработчики событий привязки команд? Я добавил связку командных привязок в свой элемент управления cusotm, однако функции, отвечающие за execute и can_execute, находятся не непосредственно в коде позади, а в другом классе. Этот класс является производным от Canvas, и я создаю экземпляр этого класса в XAML.

<s:MyCanvas  Focusable="true"  Background="Transparent" x:Name="OwnCanvas" FocusVisualStyle="{x:Null}" ScrollViewer.CanContentScroll="True" >

Я добавляю привязки команд таким образом

<UserControl.CommandBindings>
    <CommandBinding Command="{x:Static ApplicationCommands.Copy}" CanExecute="event handler from object OwnCanvas" />
</UserControl.CommandBindings>

Есть ли способ сделать это? Или я должен передать обработчик событий непосредственно в codebehind??

1 ответ

Я думаю, вам придется передать обработчик в коде, поскольку я не думаю, что это возможно. Я могу ошибаться и хотел бы, чтобы меня исправили, если это возможно.

Обычно я просто определяю CommandBinding в своем классе MyCanvas (код позади), а затем ссылаюсь на MyCanvas как на CommandTarget в пользовательском элементе управления. Как это:

    public MyCanvas()
    {
        ...

        CommandBindings.Add(
            new CommandBinding(ApplicationCommands.Copy,
                (sender, e) => {
                    // Execute Stuff
                },
                (sender, e) => {
                    e.CanExecute = true; 
                    e.Handled = true; 
                }));
        ...
    }

И в вашем пользовательском элементе управления (если он находится внутри визуального дерева MyCanvas)...

<Button Command="{x:Static ApplicationCommands.Copy}" CommandTarget="{Binding RelativeSource={RelativeSource AncestorType={x:Type s:MyCanvas}}}"/>

С вашей CommandTarget, настроенной так, что методы Execute и CanExecute будут вызываться для него.

Другие вопросы по тегам