/// <summary>
        /// Показать AccessDescriptorEditor
        /// </summary>
        /// <param name="ad">Ссылка на AccessDescriptor</param>
        /// <param name="selectedItemPanelName">Имя выбранной панели</param>
        public DescriptorCommonEditor(DescriptorBase ad, string selectedItemPanelName)
        {
            InitializeComponent();
            FillPanelsList();

            _assignedAccessDescriptor       = ad;
            _accessDescriptorName.Text      = _assignedAccessDescriptor.GetName();
            _usePanelPowerFormula.IsChecked = _assignedAccessDescriptor.GetUsePanelPowerFormulaFlag();
            _powerFormula.Text = _assignedAccessDescriptor.GetPowerFormula();

            // Если в AccessDescriptor не указана панель - берём текущую, выделенную в дереве и устанавливаем её
            // в качестве панели AccessDescriptor (для ускорения заполнения полей)
            var selectedPanel = Profile.PanelStorage.GetPanelById(_assignedAccessDescriptor.GetAssignedPanelId());

            if (selectedPanel != null)
            {
                _assignedPanel.Text = selectedPanel.Name;
            }
            else
            {
                if (selectedItemPanelName != null)
                {
                    _assignedPanel.Text = selectedItemPanelName;
                }
            }

            Localize();
        }
        public bool IsDataChanged()
        {
            var panel     = Profile.PanelStorage.GetPanelById(_assignedAccessDescriptor.GetAssignedPanelId());
            var panelName = panel != null ? panel.Name : null;

            return(!Utils.AreStringsEqual(_accessDescriptorName.Text, _assignedAccessDescriptor.GetName()) ||
                   !Utils.AreStringsEqual(_assignedPanel.Text, panelName) ||
                   _usePanelPowerFormula.IsChecked != _assignedAccessDescriptor.GetUsePanelPowerFormulaFlag() ||
                   !Utils.AreStringsEqual(_powerFormula.Text, _assignedAccessDescriptor.GetPowerFormula()));
        }