Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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




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

  • Добавьте к интерфейсу окна еще четыре кнопки так
< Window x: Class=" BindingCommandsXAML.Window1" xmlns=" https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns: x=" https://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, который будет прослушивать команду и вызывать обработчик. В нашем случае это объект окна. Два следующих обработчика используют вызовы команд из коллекции прослушивающего элемента (окна), привязанные к нему в разметке.

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

Данная страница нарушает авторские права?





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.