Наличие WPF ListView с элементами, привязанными к объекту данных и представленными редакторами (Text, 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 () ничего не происходит, потому что он обнаруживает, что все еще есть ошибки.Следуй за мной до сих пор ...
И, кстати, это решение кажется мне довольно грязным.Кто-нибудь хороший совет?Очень добро пожаловать!