我有一个列表框如何在页面的相应视图模型中处理keydown事件以删除listItems? 我在视野中使用这种鳕鱼:
<ListBox Margin="2,25,2,2" Grid.Row="3" ItemsSource="{Binding Path=CardViewModelSearchResults}" SelectedItem="{Binding Path=SelectedCategoryViewModel, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True">
<ItemsControl.ItemTemplate>
<DataTemplate >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" ff:TextBoxBehaviour.TextChangedCommand="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl, AncestorLevel=1}, Path=DataContext.TextChanged}" Text="{Binding Path=CategoryName}" FontSize="14" FontWeight="Normal" BorderThickness="0" AllowDrop="False" />
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=CategoryID}" FontSize="14" FontWeight="Normal" Visibility="Hidden" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListBox>
答案 0 :(得分:6)
您需要将KeyBinding添加到您的应用程序或专门添加到ListBox。
<ListBox Margin="2,25,2,2" Grid.Row="3" ItemsSource="{BindingPath=CardViewModelSearchResults}"
SelectedItem="{Binding Path=SelectedCategoryViewModel, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="True">
<ListBox.InputBindings>
<KeyBinding Key="Delete" Command="{Binding Path=MyDeleteCommand}" />
</ListBox.InputBindings>
</ListBox>
如果你在.net4.0中使用.net 3.5,那么你需要使用命令参考
答案 1 :(得分:0)
我会考虑在ViewModel中使用一个ICommand
实例来删除ListBox中的项目。将KeyDown事件路由到命令是一件更棘手的事情。我建议查看MVVM Light的EventToCommand
行为(如果您不想使用框架,可以自己实现)。
或者,在View的代码后面处理keydown事件,然后从那里调用命令。