Возможно, я неправильно понимаю вашу проблему, но поскольку вы привязываете свой ListView к VariableValueCollection, любые изменения, которые вы вносите в базовую коллекцию, будут отражены в вашем ListView.
Вы должны просто иметь возможность сделать что-то подобноеиз вашего обработчика события нажатия клавиш:
var newItem = new VariableValueViewModel();
VariableValueCollection.Add(newItem);
itemList.SelectedItem = newItem;
РЕДАКТИРОВАТЬ: Как сфокусировать текстовое поле:
Метод ниже позволяет найти дочерний элемент управления в визуальном дереве:
/// <summary>
/// Finds the first child in the visual tree by type.
/// </summary>
public static T TryFindChild<T>(DependencyObject parent, Func<T, bool> predicate = null) where T : class {
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) {
var child = VisualTreeHelper.GetChild(parent, i);
if ((child is T) && (predicate!=null && predicate(child as T))) {
return (T)((object)child);
} else {
T result = TryFindChild<T>(child, predicate);
if (result != null)
return result;
}
}
return null;
}
Теперь вы можете сделать что-то вроде этого:
itemList.ItemContainerGenerator.ContainerFromItem(newItem);
TextBox textBox = TryFindChild<TextBox>(newItem) as TextBox;
if (textBox != null) {
textBox.Focus();
}