/ / ListView Wstaw nowy element do TAB - wpf, listview, keydown

ListView Wstaw nowy element do TAB - wpf, listview, keydown

Posiadanie ListView WPF z elementami powiązanymi z danymiobiekt i reprezentowane przez redaktorów (Text, DateTime, itp.). Chciałbym móc wstawić nowy element, gdy użytkownicy znajdują się w ostatnim edytorze ostatniego elementu i naciśnie klawisz TAB. Następnie ustaw skupienie wejściowe na pierwszy edytor nowo dodanego elementu.

Do tej pory mam to:

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;
}
}

Ten kod prawie załatwia sprawę. Ale nie zezwalam na dodawanie specyfikacji (specyfikacji), gdy istnieją inne specyfikacje, które zawierają błędy sprawdzania poprawności (na obiekcie biznesowym) Problem polega na tym, że po naciśnięciu klawisza TAB wartość edycyjna ostatniego edytora nie jest jeszcze przekazywana do obiekt biznesowy. Następnie wywołanie this.AddSpec () nie daje żadnych rezultatów, ponieważ wykrywa, że ​​nadal występują błędy. Pójdź za mną wciąż ...

A tak przy okazji, to rozwiązanie wydaje mi się dość brudne. Czy ktoś ma dobrą radę? Bardzo mile widziany!

Odpowiedzi:

0 dla odpowiedzi № 1

Jak wspomniano wcześniej, rozwiązanie prawie załatwiło sprawę. Po pierwszej aktualizacji wiązania aktywnej kontroli wytworzono pożądany roztwór. Korzystanie z tego kodu:

BindingExpression bindingExpression = ((BaseEdit)sender).GetBindingExpression(TextEdit.TextProperty);

if (bindingExpression != null)
bindingExpression.UpdateSource();