0
讓WPF ListView具有綁定到數據對象並由編輯器(文本,日期時間等)表示的項目。我希望能夠插入一個新的項目,當用戶在最後一個項目的最後一個編輯器中,然後按Tab鍵。然後將輸入焦點設置爲新添加項目的第一個編輯器。ListView在標籤上插入新項目
到目前爲止我有這樣的:
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鍵時,最後一個編輯器的編輯值尚未傳遞給業務對象。然後當調用這個.AddSpec()時什麼也不做,因爲它檢測到仍然有錯誤。跟着我仍然...
順便說一句,這個解決方案對我來說似乎很骯髒。任何人的好建議?非常歡迎!
只是好奇你爲什麼不使用WPF DataGrid?它允許一個很好的AddNewRow功能,如果存在驗證錯誤,它可以被屏蔽,不允許...它還允許文本列,組合框,複選框列,甚至模板...驗證也很好地支持.... –
ehhh ...我們開始使用DevExpress DataGrid for WPF。但是,我們在視覺設計上遇到了一些「問題」。於是開始考慮自制解決方案。 –