Arrow keys don't work after programmatically setting ListView.SelectedItem

前端 未结 9 1763
感情败类
感情败类 2020-12-16 02:34

I have a WPF ListView control, ItemsSource is set to an ICollectionView created this way:

var collectionView = 
  System.Windows.Data.CollectionViewSource.Ge         


        
9条回答
  •  别那么骄傲
    2020-12-16 02:53

    This all seems a little bit intrusive...I went with rewriting the logic myself:

    public class CustomListView : ListView
    {
                protected override void OnPreviewKeyDown(KeyEventArgs e)
                {
                    // Override the default, sloppy behavior of key up and down events that are broken in WPF's ListView control.
                    if (e.Key == Key.Up)
                    {
                        e.Handled = true;
                        if (SelectedItems.Count > 0)
                        {
                            int indexToSelect = Items.IndexOf(SelectedItems[0]) - 1;
                            if (indexToSelect >= 0)
                            {
                                SelectedItem = Items[indexToSelect];
                                ScrollIntoView(SelectedItem);
                            }
                        }
                    }
                    else if (e.Key == Key.Down)
                    {
                        e.Handled = true;
                        if (SelectedItems.Count > 0)
                        {
                            int indexToSelect = Items.IndexOf(SelectedItems[SelectedItems.Count - 1]) + 1;
                            if (indexToSelect < Items.Count)
                            {
                                SelectedItem = Items[indexToSelect];
                                ScrollIntoView(SelectedItem);
                            }
                        }
                    }
                    else
                    {
                        base.OnPreviewKeyDown(e);
                    }
                }
    }
    

提交回复
热议问题