public DescriptorValueEditor(DescriptorMultistateBase assignedAccessDescriptor, bool enableStateManagement)
        {
            _assignedAccessDescriptor = assignedAccessDescriptor;

            _usedVariables = _assignedAccessDescriptor.GetAllUsedVariables().ToList();
            _connectorList = _assignedAccessDescriptor.GetConnectors(null, true).ToList().OrderBy(i => i.Order).ToList();
            foreach (var s in _connectorList)
            {
                foreach (var v in _usedVariables)
                {
                    var formula = _assignedAccessDescriptor.GetFormula(v, s.Id);
                    _localFormulaKeeper.StoreVariableFormula(formula, _assignedAccessDescriptor.GetId(), v, s.Id);
                }
            }
            InitializeComponent();
            Localize();
            AddState.Visibility    = enableStateManagement ? Visibility.Visible : Visibility.Hidden;
            RemoveState.Visibility = enableStateManagement ? Visibility.Visible : Visibility.Hidden;
            RenameState.Visibility = enableStateManagement ? Visibility.Visible : Visibility.Hidden;
            if (_assignedAccessDescriptor is IDefautValueAbility)
            {
                _defaultState = ((IDefautValueAbility)assignedAccessDescriptor).GetDefaultStateId();
                SelectDefaultState.Visibility = enableStateManagement ? Visibility.Visible : Visibility.Hidden;
            }
            else
            {
                SelectDefaultState.Visibility = Visibility.Hidden;
            }
            ShowData();
        }
        /// <summary>
        /// Заполнить форму данными из описателя доступа
        /// </summary>
        private void ShowData()
        {
            _dataTable = new DataTable();
            _dataTable.ColumnChanged += new DataColumnChangeEventHandler(ColumnChanged);

            // Добавляем колонку "По-умолчанию"
            if (_assignedAccessDescriptor is IDefautValueAbility)
            {
                var dc = _dataTable.Columns.Add(LanguageManager.GetPhrase(Phrases.EditorDefaultStateColumnHeader), typeof(bool));
                dc.ReadOnly = true;
            }
            // Добавляем колонку States
            _stateNameColumnIndex = _dataTable.Columns.Count;
            _dataTable.Columns.Add(LanguageManager.GetPhrase(Phrases.EditorState));

            // Заполняем количество дополнительных колонок (тех, что до формул)
            _additionalColumnsCount = _dataTable.Columns.Count;
            // Добавляем колонки с именами переменных
            foreach (var v in _usedVariables)
            {
                _dataTable.Columns.Add(Profile.VariableStorage.GetVariableById(v).Name);
            }
            // Добавляем строки. Первая колонка - наименование состояния, затем формулы для переменных
            foreach (var s in _connectorList)
            {
                var formulaList = new List <object>();

                if (_assignedAccessDescriptor is IDefautValueAbility)
                {
                    formulaList.Add(_defaultState == s.Id);
                }
                formulaList.Add(s.Name);

                formulaList.AddRange(_usedVariables.Select(v => _localFormulaKeeper.GetVariableFormulaText(_assignedAccessDescriptor.GetId(), v, s.Id)));
                _dataTable.Rows.Add(formulaList.ToArray());
            }
            StatesGrid.ItemsSource = _dataTable.AsDataView();
        }