public SlaveViewModel(IModbusAdapterProvider modbusAdapterProvider, SlaveModel slaveModel, IDirty dirty)
        {
            _modbusAdapterProvider = modbusAdapterProvider;
            _dirty = dirty;
            if (slaveModel == null) throw new ArgumentNullException(nameof(slaveModel));

            Name = slaveModel.Name;
            SlaveId = slaveModel.SlaveId;

            AddRegistersCommand = new RelayCommand(AddRegisters, CanAdd);

            if (slaveModel.Ranges != null)
            {
                foreach (var range in slaveModel.Ranges)
                {
                    var rangeViewModel = new RegisterRangeViewModel(modbusAdapterProvider, range, this, _dirty);

                    _ranges.Add(rangeViewModel);
                }
            }

            RenameCommand = new RelayCommand(Rename, CanRename);
        }
        private void AddRegisters()
        {
            var rangeModel = new RangeModel()
            {
                Name = CreateNewRangeName(),
                StartIndex = 1,
                RegisterType = RegisterType.Holding,
                IsExpanded = true
            };

            var rangeEditorViewModel = new RegisterRangeEditorViewModel(rangeModel);

            var dialog = new RegisterRangeEditorView()
            {
                DataContext = rangeEditorViewModel
            };

            if (dialog.ShowDialog() == true)
            {
                var updatedRangeModel = rangeEditorViewModel.GetModel();

                var rangeViewModel = new RegisterRangeViewModel(_modbusAdapterProvider, updatedRangeModel, this, _dirty);

                _ranges.Add(rangeViewModel);

                _dirty.MarkDirtySafe();
            }
        }