private void OnServerCommandInvoke(object obj)
        {
            Transaction transaction = new Transaction(_document);

            try {
                if (IsSynch)
                {
                    Ultil.VisibilityElement(_document, CurentView, RevitElementId, false);
                }
                IsPushAllow = false;
                OnPropertyChanged(nameof(IsPushAllow));
                IsPullAllow = true;
                OnPropertyChanged(nameof(IsPullAllow));
                SelectedObj = null;
                Ultil.HightLight(transaction, _document, CurentView.Id, _stateUniquId, false);
                PreviewVisibility = false;
                OnPropertyChanged(nameof(PreviewVisibility));
                IsSynch    = false;
                IsOther    = true;
                IsOnServer = true;
                OnPropertyChanged(nameof(IsSynch));
                OnPropertyChanged(nameof(IsOther));
                OnPropertyChanged(nameof(IsOnServer));
                Ultil.ClearUniqueIdState(transaction, _document, ref _stateUniquId);
                setCurentList(ListObjOnStack);
                SetColorButton(false, false, true);
                OnPropertyChanged(nameof(Visible));
            }
            catch {
                UserView.Dispose();
                transaction.RollBack();
            }
        }
        private void CurentPreviewInvoke(object obj)
        {
            Transaction transaction = new Transaction(_document);

            try {
                Ultil.ClearUniqueIdState(transaction, _document, ref _stateUniquId);
                Ultil.VisibilityElement(_document, CurentView, RevitElementId, false);
                Ultil.HightLight(transaction, _document, CurentView.Id, RevitElementId, true);
            }
            catch {
                UserView.Dispose();
                transaction.RollBack();
            }
        }
        private void LastestPreviewInvoke(object obj)
        {
            Transaction transaction = new Transaction(_document);

            try {
                Ultil.HightLight(transaction, _document, CurentView.Id, RevitElementId, false);
                Ultil.VisibilityElement(_document, CurentView, RevitElementId, true);
                Ultil.ClearUniqueIdState(transaction, _document, ref _stateUniquId);
                Obj selectedObject = SelectedObj as Obj;
                _stateUniquId = Ultil.CreateOpening(transaction, _document, _catergoryName, selectedObject);
                if (_stateUniquId == "")
                {
                    MessageBox.Show("Can't create this opening. Maybe this opening is not intersect with Wall");
                }
                Ultil.HightLight(transaction, _document, CurentView.Id, _stateUniquId, true);
            }
            catch {
                UserView.Dispose();
                transaction.RollBack();
            }
            //RevitElementId
        }
        private void SynchCommandInvoke(object obj)
        {
            Transaction transaction = new Transaction(_document);

            try {
                transaction.Start("Synch");
                if (IsSynch)
                {
                    Ultil.VisibilityElement(_document, CurentView, RevitElementId, false);
                }
                IsPushAllow   = true;
                IsPullAllow   = true;
                SelectedIndex = -1;
                SelectedObj   = null;
                Ultil.HightLight(transaction, _document, CurentView.Id, _stateUniquId, false);
                PreviewVisibility = true;
                OnPropertyChanged(nameof(PreviewVisibility));
                IsSynch    = true;
                IsOther    = false;
                IsOnServer = false;
                Ultil.ClearUniqueIdState(transaction, _document, ref _stateUniquId);
                setCurentList(ListObjHasSynch);
                SetColorButton(true, false, false);
                OnPropertyChanged(nameof(ListObjHasSynch));
                Visible = System.Windows.Visibility.Collapsed;
                OnPropertyChanged(nameof(Visible));
                OnPropertyChanged(nameof(IsSynch));
                OnPropertyChanged(nameof(IsOther));
                OnPropertyChanged(nameof(IsOnServer));
                OnPropertyChanged(nameof(IsPushAllow));
                OnPropertyChanged(nameof(IsPullAllow));
                transaction.Commit();
            }
            catch {
                UserView.Dispose();
                transaction.RollBack();
            }
        }