我有一个带有一些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这样的非可视元素是等价的。
答案 0 :(得分:1)
在这种情况下,最简单的方法是在CanExecute()
,MoveTestUpCommand
和MoveTestDownCommand
中实施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
的实施。