Привязки команд 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 будут вызываться для него.