Есть ли способ передать параметр команде через связывание клавиш, выполненное в коде? - PullRequest
4 голосов
/ 14 апреля 2010

Я делаю пользовательский элемент управления, мне нужно добавить несколько сочетаний клавиш по умолчанию, Microsoft уже сделала копию и вставить в текстовое поле. Однако одно из сочетаний клавиш должно передавать параметр команде, с которой он связан. Это просто сделать в xaml, есть ли способ сделать это в коде?

this.InputBindings.Add(new KeyBinding(ChangeToRepositoryCommand, new KeyGesture(Key.F1)));

Ответы [ 2 ]

5 голосов
/ 15 апреля 2010

Я нашел ответ:

InputBindings.Add(new KeyBinding(ChangeToRepositoryCommand, new KeyGesture(Key.F1)) { CommandParameter = 0 });

Прошу прощения, если мой вопрос был неясен.

1 голос
/ 14 апреля 2010

Команды копирования и вставки обрабатываются текстовым полем, поэтому параметры не передаются строго, но я знаю, к чему вы стремитесь.

Я делаю это, используя хак - и прикрепленное свойство, вот так

   public class AttachableParameter : DependencyObject {

      public static Object GetParameter(DependencyObject obj) {
         return (Object)obj.GetValue(ParameterProperty);
      }

      public static void SetParameter(DependencyObject obj, Object value) {
         obj.SetValue(ParameterProperty, value);
      }

      // Using a DependencyProperty as the backing store for Parameter.  This enables animation, styling, binding, etc...
      public static readonly DependencyProperty ParameterProperty =
          DependencyProperty.RegisterAttached("Parameter", typeof(Object), typeof(AttachableParameter), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));
}

тогда в xaml

<ListBox local:AttachableParameter.Parameter="{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}" />

, который делает параметр выбранными пунктами

затем, когда команда запускается в окне, я использую это, чтобы увидеть, есть ли параметр команды (я вызываю это из команды can execute и Executed)

  private Object GetCommandParameter() {
     Object parameter = null;
     UIElement element = FocusManager.GetFocusedElement(this) as UIElement;
     if (element != null) {
        parameter = AttachableParameter.GetParameter(element as DependencyObject);
     }
     return parameter;
  }

Это взлом, но я не нашел другого способа получить параметр команды для привязки, которая запускается из привязки ключа. (Я бы хотел узнать лучший способ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...