private async Task OnKeyDownAsync(KeyboardEventArgs args)
        {
            if (IsEditing)
            {
                switch (args.Code)
                {
                case "Escape":
                    CancelEdit();
                    break;

                case "Enter":
                case "Return":
                    await CommitEditAsync().ConfigureAwait(true);

                    break;
                }
            }
            else
            {
                switch (args.Code)
                {
                case "F2":
                    await BeginEditAsync().ConfigureAwait(true);

                    break;

                case "KeyA":
                    if (args.CtrlKey && SelectionMode == TableSelectionMode.Multiple)
                    {
                        await ClearSelectionAsync().ConfigureAwait(true);

                        Selection.AddRange(ItemsToDisplay.Select(x => KeyField !(x).ToString()));
                        await SelectionChanged.InvokeAsync(null).ConfigureAwait(true);
                    }
                    break;

                case "ArrowUp":
                case "ArrowDown":
                    if (Selection.Count == 1 && KeyField != null)
                    {
                        var items = ItemsToDisplay.ToList();
                        var item  = items.Find(x => KeyField(x).ToString() == Selection[0]);
                        if (item != null)
                        {
                            var idx = items.IndexOf(item);
                            if (args.Code == "ArrowUp" && idx > 0)
                            {
                                Selection.Clear();
                                Selection.Add(KeyField(items[idx - 1]).ToString());
                            }
                            else if (args.Code == "ArrowDown" && idx < items.Count - 1)
                            {
                                Selection.Clear();
                                Selection.Add(KeyField(items[idx + 1]).ToString());
                            }
                        }
                    }
                    break;
                }
            }

            await KeyDown.InvokeAsync(args).ConfigureAwait(true);
        }