如何在viewmodel中处理listbox keydown事件以删除listItems?

时间:2012-03-20 08:21:54

标签: wpf data-binding mvvm

我有一个列表框如何在页面的相应视图模型中处理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>

2 个答案:

答案 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 LightEventToCommand行为(如果您不想使用框架,可以自己实现)。

或者,在View的代码后面处理keydown事件,然后从那里调用命令。