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;
}
}
}
}