Наличие ListView WPF с элементами, привязанными к объекту данных и представленными редакторами (текст, DateTime и т. д.). Я хотел бы иметь возможность вставлять новый элемент, когда пользователи находятся в последнем редакторе в последнем элементе и нажимают TAB. Затем после установки фокуса ввода на первый редактор вновь добавленного элемента.
Пока у меня это:
private Boolean _tabAddedNewSpec = false;
private void OnBaseEditKeyDown(object sender, KeyEventArgs e)
{
if (!_tabAddedNewSpec)
{
if (e.Key == Key.Tab)
if (this.listview.SelectedItem == this.listview.Items[this.listview.Items.Count - 1])
{
this.AddSpec();
// No further tabbing out of this control, we manage it ourselves in this special case...
e.Handled = true;
_tabAddedNewSpec = true;
// Select last item (is NEW one)
this.listview.SelectedItem = this.listview.Items[this.listview.Items.Count - 1];
}
}
}
private void OnBaseEditKeyUp(object sender, KeyEventArgs e)
{
if (_tabAddedNewSpec)
{
((BaseEdit)sender).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
_tabAddedNewSpec = false;
}
}
Этот код почти делает свое дело. Но я не разрешаю добавлять спецификацию (спецификацию), когда есть другие спецификации, содержащие ошибки проверки (для бизнес-объекта). Проблема в том, что при нажатии TAB значение редактирования в последнем редакторе еще не передается бизнес-объекту. Затем при вызове this.AddSpec() ничего не получается, потому что он обнаруживает, что ошибки все еще есть. Следуй за мной еще...
И, кстати, мне это решение кажется довольно грязным. Кто-нибудь хороший совет? Добро пожаловать!