WPF DataTrigger可以取消激活KeyBinding吗?

时间:2015-02-28 00:40:48

标签: wpf data-binding key-bindings

我有一个带有一些KeyBindings的ListView,让用户可以通过键盘快捷键移动和删除条目。但是,我不希望这些绑定始终可以访问。

添加,删除和移动条目的按钮控件的可见性与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>

我使用Style Setters和DataTriggers来改变命令按钮&#39;可见性,但我不知道(如果有的话)对于像KeyBinding这样的非可视元素是等价的。

1 个答案:

答案 0 :(得分:1)

在这种情况下,最简单的方法是在CanExecute()MoveTestUpCommandMoveTestDownCommand中实施RemoveTestCommand方法。当您不希望用户能够执行这些操作时,此方法应返回false。因此,您的KeyBinding将无效,因为命令将不会被执行。

如果您的按钮“Command属性也绑定到这些命令,则这些按钮将根据IsEnabled返回值自动更新其可用性(CanExecute()属性)。要从viewmodel更新视图状态,只需在相应的命令上调用RaiseCanExecuteChanged()方法(这取决于您的ICommand实现)。

要根据可用性设置按钮的可见性,您可以使用以下内容:

<Button 
  Command = "{Binding SampleCommand}" 
  Visibility = "{Binding IsEnabled, RelativeSource = {RelativeSource Self}, Converter = {StaticResource BooleanToVisibilityConverter}}"/>

BooleanToVisibilityConverter中有System.Windows.Controls的实施。