У меня есть ListView с некоторыми KeyBindings, которые позволяют пользователю перемещать и удалять записи с помощью сочетаний клавиш. Однако я не хочу, чтобы привязки были доступны все время.Может ли WPF DataTrigger деактивировать KeyBinding?
Элементы управления кнопками для добавления, удаления и перемещения записей имеют свою видимость, связанную с выбором ComboBox (только некоторые пользователи могут редактировать). Я хочу, чтобы сочетания клавиш деактивировались на основе выбора окна.
Я не был в состоянии найти информацию о том, возможно ли это еще. Ребята, что вы думаете?
<ComboBox x:Name="TesterIdentityBox" ItemsSource="{Binding Path=TesterIdentityList, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Name" SelectedItem="{Binding Path=TesterIdentitySelection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedIndex="{Binding TesterIdentityIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<ListView ItemsSource="{Binding TestViewList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedIndex="{Binding SelectedTestIndex, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=SelectedTest}">
<ListView.InputBindings>
<KeyBinding Key="Up" Command="{Binding Path=MoveTestUpCommand}" CommandParameter="{Binding Path=SelectedTest.Description}" />
<KeyBinding Key="Down" Command="{Binding Path=MoveTestDownCommand}" CommandParameter="{Binding Path=SelectedTest.Description}" />
<KeyBinding Key="Delete" Command="{Binding Path=RemoveTestCommand}" />
</ListView.InputBindings>
Я использовал стиль сеттеров с DataTriggers, чтобы изменить видимость кнопки команд, но я не знаю, что (если что) является эквивалентом для невизуального элемента, как KeyBinding.
Да, я забыл о CanExecute. Я почти никогда не использую его, но он отлично работает здесь. Я решил не менять другие привязки, так как у меня уже есть контролер видимости, но я запомню это в следующий раз. Большое спасибо. –
После некоторого тестирования я заметил, что моя кнопка «Удалить» была отключена, как вы упомянули, но она была отключена все время, даже если CanExecute был правдой. Я думал, что это может быть из пользовательского интерфейса, который не обновляется, но моя реализация, похоже, не включает функцию RaiseCanExecuteChanged. Легким решением для меня было просто удалить CanExecute и изменить его на проверку внутри самой функции remove. Теперь ключ и кнопка имеют правильное поведение. –
Эта проблема вернулась, чтобы преследовать меня после того, как кто-то специально попросил меня вернуться к методу CanExecute. После того, как я задал новый вопрос, я понял, что это была комбинация логических ошибок с моей стороны: http://stackoverflow.com/questions/28910262/wpf-canexecute-is-always-disabled/28974807#28974807 –