Добавить обработчик ключа предварительного просмотра в список:
private void OnConfigRecordsPreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
e.Handled = Util.ScrollListBoxToLetter<CSVModel>(lvConfigRecords, e.Key.ToString(), i => i.HostName);
}
Добавьте метод расширения для работы linq:
public static List<T> CollectionToList<T>(this ItemCollection collection) where T : class
{
var list = new List<T>();
foreach (var item in collection)
{
if (item is T)
{
var typedItem = item as T;
list.Add(typedItem);
}
}
return list;
}
public static bool ScrollListBoxToLetter<T>(ListView listView, string key, Func<T, string> TextToMatch) where T : class
{
if (string.IsNullOrWhiteSpace(key) || key.Length != 1 || !char.IsLetterOrDigit(key.First()))
{ return false; }
var selectedItem = listView.Items.CollectionToList<T>().Select((item, id) => new { Item = item, Id = id })?.FirstOrDefault(item => (TextToMatch(item.Item)?.FirstOrDefault() ?? ' ').ToString().Trim().ToLower() == key.ToLower());
if (selectedItem != null)
{
listView.SelectedItem = selectedItem.Item;
listView.ScrollIntoView(selectedItem.Item);
var item = listView.ItemContainerGenerator.ContainerFromIndex(selectedItem.Id) as ListViewItem;
if (item != null)
item.Focus();
}
return true;
}