Запуск валидации WPF после сброса модели просмотра ⇐ C#

Место общения программистов C#
Anonymous
Запуск валидации WPF после сброса модели просмотра

Сообщение Anonymous »

Я новичок в WPF, и шаблон MVVM достаточно знакомо, чтобы я это понимаю. Приложение, над которым я работаю, является простым приложением входа в систему, когда кто-то посещает офис. Я использую инструментарий сообщества и пытаюсь очистить или обновить представление после отправки. Представление и проверка данных работы по начальной нагрузке и подчинению, но когда сброс (CLEAR) выполняется в модели представления, проверка запускается. class = "lang-cs prettyprint-override">public partial class SignInViewModel : ObservableValidator,INotifyDataErrorInfo,INotifyPropertyChanged
{
private string _firstName;
private string _lastName;
private string _email;
private string _companyName;
private string _host;
private bool _hasSignedNDA;

private readonly ErrorsViewModel _errorsViewModel;
private readonly Dictionary _propertyErrors = new();

[Required(AllowEmptyStrings = false, ErrorMessage = "First Name is required")]

public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
_errorsViewModel.ClearErrors(nameof(FirstName));
_errorsViewModel.Validate(this,nameof(FirstName), value);

OnPropertyChanged(nameof(FirstName));

}
}

[Required(AllowEmptyStrings = false, ErrorMessage = "Last Name is required")]

public string LastName
{
get { return _lastName; }
set
{
_lastName = value;
_errorsViewModel.ClearErrors(nameof(LastName));
_errorsViewModel.Validate(this,nameof(LastName), value);
OnPropertyChanged(nameof(LastName));

}
}

[EmailAddress(ErrorMessage ="Must be a vaild email address")]

[Required(AllowEmptyStrings = false, ErrorMessage = "Email is required")]
public string Email
{
get { return _email; }
set
{
_email = value;
_errorsViewModel.ClearErrors(nameof(Email));
_errorsViewModel.Validate(this,nameof(Email), value);
OnPropertyChanged(nameof(Email));

}
}

public string CompanyName
{
get { return _companyName; }
set
{
_companyName = value;
_errorsViewModel.ClearErrors(nameof(CompanyName));
_errorsViewModel.Validate(this,nameof(CompanyName), value);
OnPropertyChanged(nameof(CompanyName));

}
}

[Required(AllowEmptyStrings = false, ErrorMessage = "Host is required")]

public string Host
{
get { return _host; }
set
{
_host = value;
_errorsViewModel.ClearErrors(nameof(Host));
_errorsViewModel.Validate(this,nameof(Host), value);
OnPropertyChanged(nameof(Host));

}
}

public bool HasSignedNDA
{
get { return _hasSignedNDA; }
set
{
_hasSignedNDA = value;
_errorsViewModel.ClearErrors(nameof(HasSignedNDA));
_errorsViewModel.Validate(this,nameof(HasSignedNDA), value);
OnPropertyChanged(nameof(HasSignedNDA));

}
}

public SignInViewModel()
{
_errorsViewModel =new ErrorsViewModel();
_errorsViewModel.ErrorsChanged += ErrorsViewModel_ErrorsChanged;

}

private void ErrorsViewModel_ErrorsChanged(object sender, DataErrorsChangedEventArgs e)
{
ErrorsChanged?.Invoke(this, e);
OnPropertyChanged(nameof(CanSignIn));
}
public bool HasErrors => _errorsViewModel.HasErrors;

public event EventHandler? ErrorsChanged;
public IEnumerable GetErrors(string propertyName)
{
return _errorsViewModel.GetErrors(propertyName);

}
protected override void OnPropertyChanged(PropertyChangedEventArgs e)
{

base.OnPropertyChanged(e);
}

public bool CanSignIn => !HasErrors;

// public ICommand SignInCommand { get; }

[RelayCommand()]
public void SignIn()
{

var isValid= Validator.TryValidateObject(this, new ValidationContext(this), new List(), true);

if (isValid)
{
//truncated for brevity
ClearForm(this);
}

}

private void ClearForm(SignInViewModel viewModel)
{

if (viewModel != null)
{
viewModel.FirstName = string.Empty;
viewModel.LastName = string.Empty;
viewModel.CompanyName = string.Empty;
viewModel.Email = string.Empty;
viewModel.Host = string.Empty;
viewModel.HasSignedNDA = false;
}

}
< /code>
Просмотреть код за < /p>
public partial class SignInPage : Page
{
public SignInViewModel ViewModel;
//public ICommand Command_SignIn;
public SignInPage()
{
InitializeComponent();
ViewModel = new();
DataContext = ViewModel;

}

private void Command_SignIn(object sender, RoutedEventArgs e)

}
< /code>
xaml < /p>







































































































































































Подробнее здесь: https://stackoverflow.com/questions/796 ... view-model

Вернуться в «C#»