2016-04-20 2 views
1

В моем приложении MVVM WPF каждый вид модели содержит список кнопок. Которые действительны для этого пользовательского элемента управления.Добавление списка привязок клавиш

private List<myButton> _buttons; 

Я отображая их так:

<ItemsControl ItemsSource="{Binding buttons}" > 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate>      
        <Button Width="100" Height="40" VerticalAlignment="Top" Margin="5,5,5,5" Command="{Binding command}" Content="{Binding name}" /> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

, который работает просто отлично.

Теперь, что я хотел бы сделать, это привязка клавиш на некоторых из моих кнопок. Сохраните, например, cntr + s.

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

<Window.InputBindings> 
    <KeyBinding Key="Z" Modifiers="Ctrl" Command="{StaticResource MyCommand1}" /> 
    <KeyBinding Key="H" Modifiers="Alt" Command="{StaticResource MyCommand2}" /> 
</Window.InputBindings> 

Я пытался добавить его в список, но тот не работал вообще. Должен быть способ расширения привязок клавиш для некоторых из моих кнопок.

+1

http://stackoverflow.com/questions/1361350/keyboard-shortcuts-in-wpf – bwegs

+0

Похоже, вы думаете о [binding InputBindings] (http://stackoverflow.com/q/9385129/1997232). – Sinatr

+0

@bwegs Я пробовал, что он уже не работает, потому что кнопки - это список. Мне нужно иметь возможность циклически создавать различные привязки клавиш. – DaImTo

ответ

1

Я понял!

Дело в том, что Inputbindings - это предмет окна, а не элемент управления пользователем. Да, я новичок в WPF.

Добавляя следующее к Mainwindow.xml, он будет запускать savecommand, на котором когда-либо был выбран пользовательский контроль.

<Window.InputBindings> 
    <KeyBinding Key="s" Modifiers="Ctrl" Command="{Binding ElementName=ListBoxMenu, Path=SelectedItem.SaveCommand }" /> 
</Window.InputBindings> 

Если пользовательское управление/модельное представление того, что когда-либо было вызвано, не имеет savecommand, оно просто ничего не делает.

+0

Этот ярлык работает, если вы нажмете Ctrl + S? – 16per9

+1

Да, конечно, и что еще лучше, я не получаю сообщение об ошибке, если у usercontrol нет метода SaveCommand – DaImTo

+0

OK отлично! Благодаря! - Я попытаюсь воспроизвести это на своем программном обеспечении: p – 16per9