2010-08-20 6 views
1

Я хочу иметь команду из моей модели просмотра, связанной с F8, и не знаю много о жесте ввода. Должен ли я обернуть его в маршрутизированную команду или есть другой рекомендуемый способ сделать это?Relay/Delegate Command & InputGestures

Приветствия,
Berryl

UPDATE

Моя оригинальная проводка действительно имела две болевые точки в них. Первым было то, что до WPF 4 вы не могли привязать команду непосредственно к жесту ввода или рассчитывать на визуальное наследование для DataContext команды и должны были проходить через слой CommandManager. Это похоже на то, что MVVM Toolkit CommandReference, о котором указывал NVM, было полезно, но теперь с WPF 4 это исправлено, поскольку команда является присоединенным DP на InputBinding, поэтому все, что вам нужно сделать, это что-то вроде:

<DataGrid.InputBindings> 
    <KeyBinding Command="{Binding MyViewModel.MyCommand}" Key="F8" /> 
</DataGrid.InputBindings> 

Вторая точка боли, которую нужно реализовать, заключается в том, что привязка входного жеста к команде не совпадает с привязкой текстового представления этого жеста к элементу меню. Так что мне нужно сделать что-то вроде:

<MenuItem Header="{x:Static s:Strings.MyHeaderString}" Command="{Binding MyViewModel.MyCommand}" 
    InputGestureText="F8"/> 

Я прописана на это в надежде, что кто-либо сказать мне, что у меня что-то неправильно (или вправо). Предполагая, что это лучшее, что вы можете сделать, это зависит от того, сколько вы можете получить DRYness, и как это сделать, сохраняя строго визуальные элементы из ваших ViewModels. Это можно сделать либо с помощью некоторых свойств в вашей команде (например, KeyGesture, KeyModifier), либо с помощью «F8» в файле ресурсов, я полагаю, в зависимости от того, сколько вам нужно для повторного использования чего-то и вашей точки зрения. Также о том, сколько входных жестов у вас есть для команды!

ответ

3

How do I associate a keypress with a DelegateCommand in Composite WPF?

Это ваш ответ. Вместо ключа = «X» вы должны использовать Gesture = «F8»

+0

Спасибо за ответ. Я не использую инструментарий MVVM, но посмотрю, как это делается. Также похоже, что WPF 4 устраняет необходимость делать свой собственный Freezable, как описано [здесь] (http://blogs.msdn.com/b/llobo/archive/2009/10/29/new-wpf-features-key- gesture-binding.aspx? wa = wsignin1.0), но мне нужно переварить это немного больше. Я не ожидал много времени узнать, как заставить ключ F8 работать над командой, но, возможно, это того стоит. Cheers – Berryl

+0

Вам действительно не нужен инструментарий. CommandReference - очень простой класс. Вы можете просто добавить класс в свой проект и быть на вашем веселом пути. Тем не менее, я предпочел бы использовать WPF, встроенный в материал. – NVM

+0

Я закончил создание класса, добавляющего к моим командам как InputGestureText, так и GestureKey (и некоторые другие свойства), поэтому я могу привязать их к элементу menuItem и последнему в KeyBinding. Я назвал класс CommandReference, так что реквизит для вас. ура – Berryl