Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WPF-практика 5 События и команды.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.21 Mб
Скачать

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

Команды 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, который будет прослушивать команду и вызывать обработчик. В нашем случае это объект окна. Два следующих обработчика используют вызовы команд из коллекции прослушивающего элемента (окна), привязанные к нему в разметке.

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