using System; using System.Globalization; using System.Windows; namespace Lab2 { /// /// Interaction logic for CreateLawnmower.xaml /// public partial class CreateLawnmower : Window { /// /// Определяет, сохранять ли изменения /// private bool _save; /// /// Доступность полей формы /// private readonly bool _readOnly; /// /// Газонокосилка для редактирования /// private Lawnmower _lawnmower; /// /// Конструктор /// /// Газонокосилка для редактирования /// Доступность полей формы /// Выбрасывается, когда газонокосилка равна null public CreateLawnmower(Lawnmower parLawnmower, bool parReadOnly = false) { if (parLawnmower == null) throw new ArgumentNullException(nameof(parLawnmower)); InitializeComponent(); _materialComboBox.ItemsSource = Enum.GetValues(typeof(Material)); _lawnmower = parLawnmower; _readOnly = parReadOnly; DataContext = _lawnmower; Title = $"Lawnmower {_lawnmower.Id}"; SetEnabled(!_readOnly); if (_readOnly) _saveButton.Content = "Ok"; } /// /// Устанавливает доступность полей формы /// /// Доступность private void SetEnabled(bool parEnabled) { _nameTextBox.IsEnabled = parEnabled; _materialComboBox.IsEnabled = parEnabled; _weightTextBox.IsEnabled = parEnabled; _powerTextBox.IsEnabled = parEnabled; _fuelСapacityTextBox.IsEnabled = parEnabled; } /// /// Синхронизирует данные с полей формы /// private void SyncData() { _lawnmower.Name = _nameTextBox.Text; _lawnmower.Material = (Material)_materialComboBox.SelectedItem; _lawnmower.Weight = Convert.ToDouble(_weightTextBox.Text, CultureInfo.CurrentCulture); _lawnmower.Power = Convert.ToUInt32(_powerTextBox.Text); _lawnmower.FuelCapacity = (float)Convert.ToDouble(_fuelСapacityTextBox.Text, CultureInfo.CurrentCulture); } /// /// Обработчик нажатия на кнопку "Save" /// private void SaveButton_Click(object sender, RoutedEventArgs e) { _save = true; Close(); } /// /// Обработчик события закрытия окна /// private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if (!_save) return; try { if (!_readOnly) SyncData(); DialogResult = true; } catch (Exception ex) { MessageBox.Show(ex.Message); e.Cancel = true; } } } }