Прямой вызов команд

Команды WPF можно вызывать и напрямую, а необязательно присоединять к источникам. Правда, это будет уже извращение и сам механизм команд будет использоваться только частично. При таком подходе придется реагировать на состояния источников и на возможность выполнения команды самостоятельным кодом. Но знать о существовании такой возможности программисту следует. Покажем это...

  • Добавьте к интерфейсу окна еще четыре кнопки так
<Window x:Class="BindingCommandsXAML.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1: Декларативная привязка" Height="300" Width="300" Background="#FFD4D0C8" WindowStartupLocation="CenterScreen" > <Window.CommandBindings> <CommandBinding Command="ApplicationCommands.Open" Executed="OpenCommand_Executed"> </CommandBinding> <CommandBinding Command="ApplicationCommands.Save" Executed="SaveCommand_Executed"> </CommandBinding> </Window.CommandBindings> <StackPanel Margin="5"> <Menu> <MenuItem Header="_File"> <MenuItem Command="ApplicationCommands.Open" /> <MenuItem Command="ApplicationCommands.Save" /> </MenuItem> </Menu> <Button Margin="5" Padding="5" Focusable="False" Command="ApplicationCommands.Open" Content="{x:Static ApplicationCommands.Open}" /> <Button Margin="5" Padding="5" Focusable="False" Command="ApplicationCommands.Save" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}" /> <Button Margin="5" Padding="5" Focusable="False" Content="DirectCommandsOpen" Click="directCommandsOpen_Click" /> <Button Margin="5" Padding="5" Focusable="False" Content="DirectCommandsSave" Click="directCommandsSave_Click" /> <Button Margin="5" Padding="5" Focusable="False" Content="DirectBindingsOpen" Click="directBindingsOpen_Click" /> <Button Margin="5" Padding="5" Focusable="False" Content="DirectBindingsSave" Click="directBindingsSave_Click" /> </StackPanel></Window>
  • Вызовите контекстное меню для записей события Click и командой Navigate to Event Handler создайте четыре обработчика в файле процедурного кода
  • Заполните обработчики следующим кодом прямого вызова команд
private void directCommandsOpen_Click(object sender, RoutedEventArgs e) { ApplicationCommands.Open.Execute(null, this); } private void directCommandsSave_Click(object sender, RoutedEventArgs e) { ApplicationCommands.Save.Execute(null, this); } private void directBindingsOpen_Click(object sender, RoutedEventArgs e) { this.CommandBindings[0].Command.Execute(null); } private void directBindingsSave_Click(object sender, RoutedEventArgs e) { this.CommandBindings[1].Command.Execute(null); }

В прямых вызовах двух первых обработчиков начальный параметр метода Execute() ожидает объект с дополнительной информацией, который будет передан на обработчик команды. Второй параметр принимает целевой элемент привязки команды с возможностями интерфейса IInputElement, который будет прослушивать команду и вызывать обработчик. В нашем случае это объект окна. Два следующих обработчика используют вызовы команд из коллекции прослушивающего элемента (окна), привязанные к нему в разметке.

  • Запустите приложение и убедитесь, что добавленные кнопки инициируют прямой вызов команд

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: