using System; using System.Collections.Generic; using Microsoft.EntityFrameworkCore.Infrastructure; using ReactiveUI; using RegAuth.Models; using System.Security.Cryptography; using System.Text; using Microsoft.EntityFrameworkCore; using System.Linq; using System.Text.RegularExpressions; using System.ComponentModel; using System.Runtime.CompilerServices; namespace RegAuth.ViewModels { internal class RegViewModel : ViewModelBase, INotifyPropertyChanged { private readonly validViewModel _otherViewModel; public RegViewModel() { _otherViewModel = new validViewModel(); // Создаем экземпляр validViewModel } User _newUser = new User(); public User NewUser { get => _newUser; set => this.RaiseAndSetIfChanged(ref _newUser, 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 void AddUser() { Console.WriteLine("У меня уже есть админ"); if (!string.IsNullOrEmpty(Password) && string.IsNullOrEmpty(PasswordError))//если у нас пароль не пуст и ошибок не наблюдается, тогда метод работает дальше и реализует добавление в бд { NewUser.Password = MD5.HashData(Encoding.ASCII.GetBytes(Password)); NewUser.Roleid = 2; MainWindowViewModel.myConnection.Users.Add(NewUser); 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 event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }