private void _listViewResults_PreviewMouseRightButtonUp(object sender, MouseButtonEventArgs e) { var item = _listViewResults.GetObjectAtPoint <ListViewItem>(e.GetPosition(_listViewResults)); if (item != null) { HashSet <CmdInfo> commands = new HashSet <CmdInfo>(); foreach (ValidationErrorView error in _listViewResults.SelectedItems) { error.GetCommands(commands); } ContextMenu menu = new ContextMenu(); foreach (var cmd in commands) { var lcmd = cmd; MenuItem mitem = new MenuItem { Header = cmd.DisplayName, Icon = new Image { Source = ApplicationManager.GetResourceImage(cmd.Icon) } }; mitem.Click += delegate { var items = _listViewResults.SelectedItems.Cast <ValidationErrorView>().ToList(); _asyncOperation.SetAndRunOperation(new GrfThread(delegate { List <object> dbs = new List <object>(); foreach (var serverDb in ServerDbs.ListDbs) { var db = _sdb.TryGetDb(serverDb); if (db != null) { if (db.AttributeList.PrimaryAttribute.DataType == typeof(int)) { var adb = (AbstractDb <int>)db; dbs.Add(adb); } else if (db.AttributeList.PrimaryAttribute.DataType == typeof(string)) { var adb = (AbstractDb <string>)db; dbs.Add(adb); } } } foreach (var db in dbs) { _to <int>(db, _onBegin); _to <string>(db, _onBegin); } try { AProgress.Init(_validation); _validation.Grf.Close(); _validation.Grf.Open(GrfPath.Combine(SdeAppConfiguration.ProgramDataPath, "missing_resources.grf"), GrfLoadOptions.OpenOrNew); for (int i = 0; i < items.Count; i++) { AProgress.IsCancelling(_validation); if (!lcmd.Execute(items[i], items)) { return; } _validation.Progress = (float)i / items.Count * 100f; } if (_validation.Grf.IsModified) { _validation.Progress = -1; _validation.Grf.QuickSave(); _validation.Grf.Reload(); _validation.Grf.Compact(); } } catch (OperationCanceledException) { } catch (Exception err) { ErrorHandler.HandleException(err); } finally { foreach (var db in dbs) { _to <int>(db, _onEnd); _to <string>(db, _onEnd); } _validation.Grf.Close(); AProgress.Finalize(_validation); } }, _validation, 200, null, true, true)); }; menu.Items.Add(mitem); } item.ContextMenu = menu; item.ContextMenu.IsOpen = true; } else { e.Handled = true; } }