如何在编辑时获取ListView SelectedItem?

时间:2015-10-05 14:56:07

标签: c# wpf

当我按下Ctrl + S组合按键时,我试图保存记录。 下面的代码只有当我退出TextBox并选择行然后按Ctrl + S才能正常工作。 如何在不退出TextBox的情况下选择SelectItem?例如:输入文字>> Ctrl + S>>继续打字。 这是我的代码:

  DATE        HOUR    COUNT
1 2014-02-15  15      2
2 2014-04-15  02      1
3 2014-05-15  11      1
4 2014-06-15  15      1
5 2014-06-15  16      1
....

和XAML:

        if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.S))
        {
            sql.saveSoftwareChanges(_list.SelectedItem as Software);
            e.Handled = true;
        }

2 个答案:

答案 0 :(得分:1)

经过大量研究和反复试验,我得到了解决方案。 它离开那个领域很简单,可以通过以下方式实现:

MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

整个方法如下:

        if (Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.S))
        {
            var uie = e.OriginalSource as UIElement;
            uie.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            sql.saveSoftwareChanges(_list.SelectedItem as Software);

            uie.Focus();
            e.Handled = true;
        }

我希望这也有助于其他人。

答案 1 :(得分:0)

您必须将保存代码放在一个函数中,然后从当时可能具有焦点的任何控件中调用此函数。 (即文本框)。 请记住,键盘事件仅在相应控件具有焦点时触发。

测试一下:

<ListView x:Name="_list" Visibility="Visible" KeyDown="_list_KeyDown">

        <!--RESOURCES-->
        <ListView.Resources>
            <Style TargetType="ListViewItem">
                <Style.Triggers>
                    <Trigger Property="IsKeyboardFocusWithin" Value="true">
                        <Setter Property="IsSelected" Value="true" />
                    </Trigger>

                    <Trigger Property="IsSelected" Value="true">
                        <Setter Property="Background" Value="#FFFFFF9A" />
                    </Trigger>

                </Style.Triggers>
            </Style>
        </ListView.Resources>
        <!--/RESOURCES-->

        <ListView.View>
            <GridView>

                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <Button x:Name="_save" Content="Save" MinWidth="20" Width="AUTO" Click="_save_Click" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Header="Product ID">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding productId}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Header="Product">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding product}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                 </GridViewColumn>

                <GridViewColumn Header="Path">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding path}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Header="Master Path">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding master_path}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Header="Parameters">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding parameters}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

                <GridViewColumn Header="Windows Version">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding windowsVersion}" MinWidth="20" Width="AUTO" Padding="2" KeyDown="_list_KeyDown"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

            </GridView>
        </ListView.View>
    </ListView>