Как обработать событие keydown списка в viewmodel, чтобы удалить listItems? - PullRequest
0 голосов
/ 20 марта 2012

У меня есть список, как мне обработать событие 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 ]

6 голосов
/ 20 марта 2012

Вам необходимо добавить связывание клавиш в ваше приложение или, в частности, в ваш ListBox.

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>   

Вам нужно использовать Справочник команд, если вы используете .net 3.5 в .net4.0 это отлично работает

0 голосов
/ 20 марта 2012

Я бы рассмотрел использование экземпляра ICommand в вашей ViewModel, который удалит элемент из ListBox. Направить событие KeyDown к команде - более сложная задача. Я предлагаю взглянуть на поведение MVVM Light EventToCommand (вы можете реализовать это самостоятельно, если не хотите использовать фреймворк).

В качестве альтернативы, обработайте событие keydown в коде вашего View и затем вызовите команду оттуда.

...