private static void DeleteSolo <T>(DataGrid dg, Func <T, string> nameGetter, Action <T> actionBeforeDelete, string questionFmt, string caption, UIList <T> vm)
        {
            var item = (T)dg.SelectedItem;
            var msg  = string.Format(questionFmt, nameGetter(item));
            var resp = MessageBox.Show(msg, "   " + caption, MessageBoxButton.YesNo, MessageBoxImage.Question);

            if (resp != MessageBoxResult.Yes)
            {
                return;
            }
            UIThread.Run(() =>
            {
                actionBeforeDelete?.Invoke(item);
                vm.Remove(item);
                vm.RaiseItemDeleted(item);
            });
        }