public virtual void DoProcessPairAction(String Action, String Param)
        {
            switch (Action)
            {
            case "View":
                IObjectSpace os = null;

                var obj = GetObjectByKey(Param);
                var svp = new ShowViewParameters();

                if (collection is PropertyCollectionSource)
                {
                    os = collection.ObjectSpace.CreateNestedObjectSpace();
                    svp.TargetWindow = TargetWindow.NewModalWindow;
                }
                else
                {
                    os = App.CreateObjectSpace(obj.GetType());
                    svp.TargetWindow = TargetWindow.Default;
                }

                obj = os.GetObject(obj);
                DetailView view = App.CreateDetailView(os, ListView.DetailView, true, obj);
                view.ViewEditMode = EditMode;
                svp.CreatedView   = view;
                App.ShowViewStrategy.ShowView(svp, new ShowViewSource(null, null));

                break;

            case "Mark":
                string[] marks = String.Concat(Param).Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var mark in marks)
                {
                    if (MarkedObjects.IndexOf(mark) == -1)
                    {
                        MarkedObjects.Add(mark);
                    }
                    else
                    {
                        MarkedObjects.Remove(mark);
                    }
                }
                control.Refresh();
                CalcSelectedObjects();
                OnSelectionChanged();
                break;
            }
        }