using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Security.Cryptography; using System.Text; using ReactiveUI; using RegAuth.Models; namespace RegAuth.ViewModels { internal class AdminViewModel : ViewModelBase, INotifyPropertyChanged { private readonly validViewModel _otherViewModel; public AdminViewModel() { _otherViewModel = new validViewModel(); // Create an instance of the other ViewModel } public void ToAdmin() { MainWindowViewModel.Instance.Uc = new CreateAdmin(); } User _newAdmin = new User(); public User NewAdmin { get => _newAdmin; set => this.RaiseAndSetIfChanged(ref _newAdmin, value); } string _password; private string _passwordError; public string Password { get => _password; set { if (this.RaiseAndSetIfChanged(ref _password, value)) { // Проверяем пароль и устанавливаем сообщение об ошибке PasswordError = _otherViewModel.ValidatePassword(value); } } } public string PasswordError { get => _passwordError; private set { this.RaiseAndSetIfChanged(ref _passwordError, value); // Уведомляем об изменении } } public event PropertyChangedEventHandler PropertyChanged; public void addAdmin()//функция для добавления админа в базу { Console.WriteLine("Админа в базе нет"); if (!string.IsNullOrEmpty(Password) && string.IsNullOrEmpty(PasswordError))//если у нас пароль не пуст и ошибок не наблюдается, тогда метод работает дальше и реализует добавление в бд { NewAdmin.Password = MD5.HashData(Encoding.ASCII.GetBytes(Password)); NewAdmin.Roleid = 1; MainWindowViewModel.myConnection.Users.Add(NewAdmin); MainWindowViewModel.myConnection.SaveChanges(); MainWindowViewModel.Instance.Uc = new Main(); } } protected bool RaiseAndSetIfChanged(ref T field, T value, [CallerMemberName] string propertyName = null)//это нам надо, чтобы корректно обработать результат в RaiseAndSetIfChanged { if (EqualityComparer.Default.Equals(field, value)) return false; // Если значение не изменилось, возвращаем false field = value; // Обновляем поле OnPropertyChanged(propertyName); // Вызываем событие изменения свойства return true; // Возвращаем true, если значение изменилось } public void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }