From dc35ce3325cfff3233972624555cbdffaa12a1eb Mon Sep 17 00:00:00 2001 From: grigory Date: Wed, 1 Apr 2026 14:07:16 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D1=82=20MVVM,=20=D0=BD?= =?UTF-8?q?=D1=83=D0=B6=D0=BD=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8C=20=D0=BF=D0=BE=D0=B4=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=87=D0=BD=D1=83=D1=8E=20=D0=B0=D1=80=D1=85=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D1=83=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UP01Task2App/UP01Task2App.slnx | 3 + UP01Task2App/UP01Task2App/App.xaml | 20 +++++ UP01Task2App/UP01Task2App/App.xaml.cs | 14 ++++ UP01Task2App/UP01Task2App/AssemblyInfo.cs | 10 +++ .../UP01Task2App/Styles/ButtonStyle.xaml | 58 +++++++++++++ .../UP01Task2App/Styles/ComboBoxStyle.xaml | 30 +++++++ .../UP01Task2App/Styles/DatePickerStyle.xaml | 26 ++++++ .../UP01Task2App/Styles/TextBoxStyle.xaml | 21 +++++ UP01Task2App/UP01Task2App/UP01Task2App.csproj | 11 +++ .../UP01Task2App/ViewModels/BaseViewModel.cs | 19 +++++ .../UP01Task2App/ViewModels/RelayCommand.cs | 20 +++++ .../Windows/AppointmentWindow.xaml | 36 ++++++++ .../Windows/AppointmentWindow.xaml.cs | 25 ++++++ .../Windows/ClientAppointmentList.xaml | 37 +++++++++ .../Windows/ClientAppointmentList.xaml.cs | 25 ++++++ .../UP01Task2App/Windows/ClientWindow.xaml | 83 +++++++++++++++++++ .../UP01Task2App/Windows/ClientWindow.xaml.cs | 25 ++++++ 17 files changed, 463 insertions(+) create mode 100644 UP01Task2App/UP01Task2App.slnx create mode 100644 UP01Task2App/UP01Task2App/App.xaml create mode 100644 UP01Task2App/UP01Task2App/App.xaml.cs create mode 100644 UP01Task2App/UP01Task2App/AssemblyInfo.cs create mode 100644 UP01Task2App/UP01Task2App/Styles/ButtonStyle.xaml create mode 100644 UP01Task2App/UP01Task2App/Styles/ComboBoxStyle.xaml create mode 100644 UP01Task2App/UP01Task2App/Styles/DatePickerStyle.xaml create mode 100644 UP01Task2App/UP01Task2App/Styles/TextBoxStyle.xaml create mode 100644 UP01Task2App/UP01Task2App/UP01Task2App.csproj create mode 100644 UP01Task2App/UP01Task2App/ViewModels/BaseViewModel.cs create mode 100644 UP01Task2App/UP01Task2App/ViewModels/RelayCommand.cs create mode 100644 UP01Task2App/UP01Task2App/Windows/AppointmentWindow.xaml create mode 100644 UP01Task2App/UP01Task2App/Windows/AppointmentWindow.xaml.cs create mode 100644 UP01Task2App/UP01Task2App/Windows/ClientAppointmentList.xaml create mode 100644 UP01Task2App/UP01Task2App/Windows/ClientAppointmentList.xaml.cs create mode 100644 UP01Task2App/UP01Task2App/Windows/ClientWindow.xaml create mode 100644 UP01Task2App/UP01Task2App/Windows/ClientWindow.xaml.cs diff --git a/UP01Task2App/UP01Task2App.slnx b/UP01Task2App/UP01Task2App.slnx new file mode 100644 index 0000000..8b95579 --- /dev/null +++ b/UP01Task2App/UP01Task2App.slnx @@ -0,0 +1,3 @@ + + + diff --git a/UP01Task2App/UP01Task2App/App.xaml b/UP01Task2App/UP01Task2App/App.xaml new file mode 100644 index 0000000..89f329d --- /dev/null +++ b/UP01Task2App/UP01Task2App/App.xaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/UP01Task2App/UP01Task2App/App.xaml.cs b/UP01Task2App/UP01Task2App/App.xaml.cs new file mode 100644 index 0000000..24692d2 --- /dev/null +++ b/UP01Task2App/UP01Task2App/App.xaml.cs @@ -0,0 +1,14 @@ +using System.Configuration; +using System.Data; +using System.Windows; + +namespace UP01Task2App +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } + +} diff --git a/UP01Task2App/UP01Task2App/AssemblyInfo.cs b/UP01Task2App/UP01Task2App/AssemblyInfo.cs new file mode 100644 index 0000000..b0ec827 --- /dev/null +++ b/UP01Task2App/UP01Task2App/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] diff --git a/UP01Task2App/UP01Task2App/Styles/ButtonStyle.xaml b/UP01Task2App/UP01Task2App/Styles/ButtonStyle.xaml new file mode 100644 index 0000000..dc9f04c --- /dev/null +++ b/UP01Task2App/UP01Task2App/Styles/ButtonStyle.xaml @@ -0,0 +1,58 @@ + + + \ No newline at end of file diff --git a/UP01Task2App/UP01Task2App/Styles/ComboBoxStyle.xaml b/UP01Task2App/UP01Task2App/Styles/ComboBoxStyle.xaml new file mode 100644 index 0000000..b9a93ab --- /dev/null +++ b/UP01Task2App/UP01Task2App/Styles/ComboBoxStyle.xaml @@ -0,0 +1,30 @@ + + + + + \ No newline at end of file diff --git a/UP01Task2App/UP01Task2App/Styles/DatePickerStyle.xaml b/UP01Task2App/UP01Task2App/Styles/DatePickerStyle.xaml new file mode 100644 index 0000000..626c74b --- /dev/null +++ b/UP01Task2App/UP01Task2App/Styles/DatePickerStyle.xaml @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/UP01Task2App/UP01Task2App/Styles/TextBoxStyle.xaml b/UP01Task2App/UP01Task2App/Styles/TextBoxStyle.xaml new file mode 100644 index 0000000..b679aa0 --- /dev/null +++ b/UP01Task2App/UP01Task2App/Styles/TextBoxStyle.xaml @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/UP01Task2App/UP01Task2App/UP01Task2App.csproj b/UP01Task2App/UP01Task2App/UP01Task2App.csproj new file mode 100644 index 0000000..6e6420e --- /dev/null +++ b/UP01Task2App/UP01Task2App/UP01Task2App.csproj @@ -0,0 +1,11 @@ + + + + WinExe + net10.0-windows + enable + enable + true + + + diff --git a/UP01Task2App/UP01Task2App/ViewModels/BaseViewModel.cs b/UP01Task2App/UP01Task2App/ViewModels/BaseViewModel.cs new file mode 100644 index 0000000..9901540 --- /dev/null +++ b/UP01Task2App/UP01Task2App/ViewModels/BaseViewModel.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace UP01Task2App.ViewModels +{ + using System.ComponentModel; + using System.Runtime.CompilerServices; + + public class BaseViewModel : INotifyPropertyChanged + { + public event PropertyChangedEventHandler PropertyChanged; + + protected void OnPropertyChanged([CallerMemberName] string name = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); + } + } +} diff --git a/UP01Task2App/UP01Task2App/ViewModels/RelayCommand.cs b/UP01Task2App/UP01Task2App/ViewModels/RelayCommand.cs new file mode 100644 index 0000000..a8b28e2 --- /dev/null +++ b/UP01Task2App/UP01Task2App/ViewModels/RelayCommand.cs @@ -0,0 +1,20 @@ +using System; +using System.Windows.Input; + +public class RelayCommand : ICommand +{ + private readonly Action _execute; + private readonly Func _canExecute; + + public RelayCommand(Action execute, Func canExecute = null) + { + _execute = execute; + _canExecute = canExecute; + } + + public bool CanExecute(object parameter) => _canExecute?.Invoke() ?? true; + + public void Execute(object parameter) => _execute(); + + public event EventHandler CanExecuteChanged; +} \ No newline at end of file diff --git a/UP01Task2App/UP01Task2App/Windows/AppointmentWindow.xaml b/UP01Task2App/UP01Task2App/Windows/AppointmentWindow.xaml new file mode 100644 index 0000000..ffd3a19 --- /dev/null +++ b/UP01Task2App/UP01Task2App/Windows/AppointmentWindow.xaml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + +