126 lines
3.8 KiB
C#
126 lines
3.8 KiB
C#
using System;
|
||
using System.Globalization;
|
||
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Data;
|
||
|
||
namespace Lab2
|
||
{
|
||
/// <summary>
|
||
/// Interaction logic for CreateTrimmer.xaml
|
||
/// </summary>
|
||
public partial class CreateTrimmer : Window
|
||
{
|
||
/// <summary>
|
||
/// Определяет, сохранять ли изменения
|
||
/// </summary>
|
||
private bool _save;
|
||
/// <summary>
|
||
/// Доступность полей формы
|
||
/// </summary>
|
||
private readonly bool _readOnly;
|
||
/// <summary>
|
||
/// Признак невозможности отмены
|
||
/// </summary>
|
||
private readonly bool _isForced;
|
||
/// <summary>
|
||
/// Триммер для редактирования
|
||
/// </summary>
|
||
private readonly Trimmer _trimmer;
|
||
|
||
/// <summary>
|
||
/// Конструктор
|
||
/// </summary>
|
||
/// <param name="parTrimmer">Триммер для редактирования</param>
|
||
/// <param name="parReadOnly">Доступность полей формы</param>
|
||
/// <param name="parIsForced">Признак невозможности отмены</param>
|
||
/// <exception cref="ArgumentNullException">Выбрасывается, когда триммер равен null</exception>
|
||
public CreateTrimmer(Trimmer parTrimmer, bool parReadOnly = false, bool parIsForced = false)
|
||
{
|
||
if (parTrimmer == null)
|
||
throw new ArgumentNullException(nameof(parTrimmer));
|
||
|
||
InitializeComponent();
|
||
|
||
_materialComboBox.ItemsSource = Enum.GetValues(typeof(Material));
|
||
_modeComboBox.ItemsSource = Enum.GetValues(typeof(TrimmerMode));
|
||
|
||
_trimmer = parTrimmer;
|
||
_readOnly = parReadOnly;
|
||
_isForced = parIsForced;
|
||
DataContext = _trimmer;
|
||
|
||
Title = $"Trimmer {_trimmer.Id}";
|
||
|
||
SetEnabled(!_readOnly);
|
||
|
||
if (_readOnly)
|
||
_saveButton.Content = "Ok";
|
||
|
||
if (_isForced)
|
||
_cancelButton.Visibility = Visibility.Collapsed;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Устанавливает доступность полей формы
|
||
/// </summary>
|
||
/// <param name="parEnabled">Доступность</param>
|
||
private void SetEnabled(bool parEnabled)
|
||
{
|
||
_nameTextBox.IsEnabled = parEnabled;
|
||
_materialComboBox.IsEnabled = parEnabled;
|
||
_weightTextBox.IsEnabled = parEnabled;
|
||
_powerTextBox.IsEnabled = parEnabled;
|
||
_modeComboBox.IsEnabled = parEnabled;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Синхронизирует данные с полей формы
|
||
/// </summary>
|
||
private void SyncData()
|
||
{
|
||
BindingOperations.GetBindingExpression(_nameTextBox, TextBox.TextProperty)?.UpdateSource();
|
||
BindingOperations.GetBindingExpression(_materialComboBox, ComboBox.TextProperty)?.UpdateSource();
|
||
BindingOperations.GetBindingExpression(_weightTextBox, TextBox.TextProperty)?.UpdateSource();
|
||
BindingOperations.GetBindingExpression(_powerTextBox, TextBox.TextProperty)?.UpdateSource();
|
||
BindingOperations.GetBindingExpression(_modeComboBox, ComboBox.TextProperty)?.UpdateSource();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Обработчик события нажатия на кнопку "Save"
|
||
/// </summary>
|
||
private void SaveButton_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
_save = true;
|
||
|
||
Close();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Обработчик события закрытия окна
|
||
/// </summary>
|
||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||
{
|
||
if (!_save)
|
||
{
|
||
if (_isForced)
|
||
e.Cancel = true;
|
||
|
||
return;
|
||
}
|
||
|
||
try
|
||
{
|
||
if (!_readOnly)
|
||
SyncData();
|
||
DialogResult = true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
e.Cancel = true;
|
||
}
|
||
}
|
||
}
|
||
}
|