Маленький пример, на привязку команд к горячим клавишам. Пример, как ответ на вот этот вопрос с форумов MSDN.
Итак, давайте посмотрим, как настроить команды, чтобы при нажатии на кнопки клавиатуры, менялся бы цвет прямоугольника размещенного на форме.
Реализовывать, чтобы было интересно в рамках MVVM. Для этого в проект добавим класс с именем MainWindowViewModel. Команды будем реализовывать с помощью класса, который я описывал вот здесь.
Таким образом, класс будет содержать цвет прямоугольника и две команды. Ну и два метода, которые будут реализовывать логику команд. Т.к. изменение цвета в нашем классе, должен отслеживать визуальный интерфейс, нам придется сделать наш класс потомком DependencyObject, а свойство объявить как DependencyProperty. Подробнее зачем это нужно, можно посмотреть здесь. Вот его код:
public MainWindowViewModel()
private void SetGreen()
В конструктор, происходит инициализация начальным цветом и инициализируются команды.
Чтобы не правиль App.xaml, присвоение ViewModel-а в DataContext главной формы, произведем из нее же:
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
}
Ну с кодом на главной форме закончили, осталось привести разметку:
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
Title="MainWindow" Height="350" Width="525">
<Grid>
<Rectangle Fill="{Binding RectangleColor}" Margin="20" />
</Grid>
</Window>
Запустив приложение, мы, что естественно, увидим синий квадрат. Давайте добавим привязку команд из ViewModel к клавишам. Для этого, достаточно у нашего окна добавить вот такую разметку:
Gesture="CTRL+R" />
<KeyBinding Command="{Binding GreenCommand}"
Gesture="CTRL+G" />
</Window.InputBindings>
Все, запускаем:
Итак, давайте посмотрим, как настроить команды, чтобы при нажатии на кнопки клавиатуры, менялся бы цвет прямоугольника размещенного на форме.
Реализовывать, чтобы было интересно в рамках MVVM. Для этого в проект добавим класс с именем MainWindowViewModel. Команды будем реализовывать с помощью класса, который я описывал вот здесь.
Таким образом, класс будет содержать цвет прямоугольника и две команды. Ну и два метода, которые будут реализовывать логику команд. Т.к. изменение цвета в нашем классе, должен отслеживать визуальный интерфейс, нам придется сделать наш класс потомком DependencyObject, а свойство объявить как DependencyProperty. Подробнее зачем это нужно, можно посмотреть здесь. Вот его код:
public
class MainWindowViewModel
: DependencyObject
{
public ICommand RedCommand { get;
set; }
public ICommand GreenCommand { get;
set; }
public SolidColorBrush RectangleColor
{
get { return (SolidColorBrush)GetValue(RectangleColorProperty);
}
set {
SetValue(RectangleColorProperty, value); }
}
// Using a
DependencyProperty as the backing store for RectangleColor. This enables animation, styling, binding,
etc...
public static readonly DependencyProperty RectangleColorProperty =
DependencyProperty.Register("RectangleColor", typeof(SolidColorBrush),
typeof(MainWindowViewModel),
new UIPropertyMetadata(null));
public MainWindowViewModel()
{
RectangleColor = new SolidColorBrush(Colors.Blue);
RedCommand = new
SimpleCommand(SetRed);
GreenCommand = new
SimpleCommand(SetGreen);
}
private void SetRed()
{
RectangleColor = new SolidColorBrush(Colors.Red);
}
private void SetGreen()
{
RectangleColor = new SolidColorBrush(Colors.Green);
}
}
Чтобы не правиль App.xaml, присвоение ViewModel-а в DataContext главной формы, произведем из нее же:
public
partial class MainWindow : Window
{public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
}
Ну с кодом на главной форме закончили, осталось привести разметку:
<Window x:Class="WpfApplication28.MainWindow"
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
Title="MainWindow" Height="350" Width="525">
<Grid>
<Rectangle Fill="{Binding RectangleColor}" Margin="20" />
</Grid>
</Window>
Запустив приложение, мы, что естественно, увидим синий квадрат. Давайте добавим привязку команд из ViewModel к клавишам. Для этого, достаточно у нашего окна добавить вот такую разметку:
<Window.InputBindings>
<KeyBinding Command="{Binding
RedCommand}"Gesture="CTRL+R" />
<KeyBinding Command="{Binding GreenCommand}"
Gesture="CTRL+G" />
</Window.InputBindings>
Все, запускаем:
Комментариев нет:
Отправить комментарий