Я хочу иметь команду из моей модели просмотра, связанной с 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» в файле ресурсов, я полагаю, в зависимости от того, сколько вам нужно для повторного использования чего-то и вашей точки зрения. Также о том, сколько входных жестов у вас есть для команды!
Спасибо за ответ. Я не использую инструментарий 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
Вам действительно не нужен инструментарий. CommandReference - очень простой класс. Вы можете просто добавить класс в свой проект и быть на вашем веселом пути. Тем не менее, я предпочел бы использовать WPF, встроенный в материал. – NVM
Я закончил создание класса, добавляющего к моим командам как InputGestureText, так и GestureKey (и некоторые другие свойства), поэтому я могу привязать их к элементу menuItem и последнему в KeyBinding. Я назвал класс CommandReference, так что реквизит для вас. ура – Berryl