Я в настоящее время делаю приложение для посетителей для моего рабочего места, это простое приложение, позволяющее посетителям входить и выходить, у меня есть текстовые поля с просьбой информации о посетителях. У моего SignInView много текстовых поток и мой подписывающая среда, у меня есть SignInView, работающая правильно, но когда я связываю его с моей подписью, он все еще подтверждает то, что в SignInView, а не подписан. У меня есть вся моя проверка в классе для посетителей, который я ссылаюсь на представления/текстовые поле, использующие изменения свойства уведомления
Это то, на что выглядит мой класс, я попытался разделить представление на различные функции и вызывая эту функцию, я также пытался использовать свой навигации/хранилище, чтобы обнаружить, что есть в пользователе, а затем вызывает у вас соответствующие валидации, но не соответствует. Просмотры и просмотры и модели.using CommunityToolkit.Mvvm.ComponentModel;
using System;
using System.Text.RegularExpressions;
namespace Visitor_App.Models
{
public enum ValidationContext
{
SignIn,
SignOut,
GroupSignIn,
GroupSignOut
}
public partial class Visitor : ObservableObject
{
public string VisitorID { get; set; }
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
[NotifyPropertyChangedFor(nameof(ValidationMessage))]
private string _forename;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
[NotifyPropertyChangedFor(nameof(ValidationMessage))]
private string _surname;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
[NotifyPropertyChangedFor(nameof(ValidationMessage))]
private string _company;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsOtherReasonVisible))]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
[NotifyPropertyChangedFor(nameof(ValidationMessage))]
private string _reasonOfVisit;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
[NotifyPropertyChangedFor(nameof(ValidationMessage))]
private string? _otherReason;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsOtherPersonVisible))]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
[NotifyPropertyChangedFor(nameof(ValidationMessage))]
private string _personOfVisit;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
[NotifyPropertyChangedFor(nameof(ValidationMessage))]
private string? _otherPerson;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
private string _hostForename;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
private string _hostSurname;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Invalid))]
[NotifyPropertyChangedFor(nameof(Valid))]
private string _membersOfGroup;
public bool Invalid => !Valid;
public bool Valid => IsValidFor(CurrentValidationContext);
public string ValidationMessage => GetValidationMessage(CurrentValidationContext);
public ValidationContext CurrentValidationContext { get; set; } = ValidationContext.SignIn;
public bool IsValidFor(ValidationContext context)
{
switch (context)
{
case ValidationContext.SignIn:
return ValidateSignIn();
case ValidationContext.SignOut:
return ValidateSignOut();
case ValidationContext.GroupSignIn:
return ValidateGroupSignIn();
case ValidationContext.GroupSignOut:
return ValidateGroupSignOut();
default:
throw new ArgumentOutOfRangeException(nameof(context), context, null);
}
}
private bool ValidateSignIn()
{
if (string.IsNullOrWhiteSpace(Forename) || Regex.IsMatch(Forename, @"\d"))
return false;
if (string.IsNullOrWhiteSpace(Surname) || Regex.IsMatch(Surname, @"\d"))
return false;
if (string.IsNullOrWhiteSpace(Company))
return false;
if (string.IsNullOrWhiteSpace(ReasonOfVisit))
return false;
if (ReasonOfVisit == "Other" && (string.IsNullOrWhiteSpace(OtherReason) || Regex.IsMatch(OtherReason, @"\d")))
return false;
if (string.IsNullOrWhiteSpace(PersonOfVisit))
return false;
if (PersonOfVisit == "Other" && (string.IsNullOrWhiteSpace(OtherPerson) || Regex.IsMatch(OtherPerson, @"\d")))
return false;
return true;
}
private bool ValidateSignOut()
{
if (string.IsNullOrWhiteSpace(Company))
return false;
if (string.IsNullOrWhiteSpace(Forename) || Regex.IsMatch(Forename, @"\d"))
return false;
if (string.IsNullOrWhiteSpace(Surname) || Regex.IsMatch(Surname, @"\d"))
return false;
return true;
}
private bool ValidateGroupSignIn()
{
if (Regex.IsMatch(_hostForename, @"\d"))
return false;
if (Regex.IsMatch(_hostSurname, @"\d"))
return false;
if (Regex.IsMatch(_membersOfGroup, @"\d"))
return false;
if (string.IsNullOrWhiteSpace(Company))
return false;
if (string.IsNullOrWhiteSpace(ReasonOfVisit))
return false;
if (ReasonOfVisit == "Other" && (string.IsNullOrWhiteSpace(OtherReason) || Regex.IsMatch(OtherReason, @"\d")))
return false;
if (string.IsNullOrWhiteSpace(PersonOfVisit))
return false;
if (PersonOfVisit == "Other" && (string.IsNullOrWhiteSpace(OtherPerson) || Regex.IsMatch(OtherPerson, @"\d")))
return false;
return true;
}
private bool ValidateGroupSignOut()
{
if (string.IsNullOrWhiteSpace(Company))
return false;
if (string.IsNullOrWhiteSpace(_hostForename) || Regex.IsMatch(_hostForename, @"\d"))
return false;
if (string.IsNullOrWhiteSpace(_hostSurname) || Regex.IsMatch(_hostSurname, @"\d"))
return false;
return true;
}
public string GetValidationMessage(ValidationContext context)
{
switch (context)
{
case ValidationContext.SignIn:
return GetSignInValidationMessage();
case ValidationContext.SignOut:
return GetSignOutValidationMessage();
case ValidationContext.GroupSignIn:
return GetSignOutValidationMessage();
case ValidationContext.GroupSignOut:
return GetSignOutValidationMessage();
default:
throw new ArgumentOutOfRangeException(nameof(context), context, null);
}
}
private string GetSignInValidationMessage()
{
if (string.IsNullOrWhiteSpace(Forename))
return "Forename cannot be empty";
if (Regex.IsMatch(Forename, @"\d"))
return "Forename must not contain numbers";
if (string.IsNullOrWhiteSpace(Surname))
return "Surname cannot be empty";
if (Regex.IsMatch(Surname, @"\d"))
return "Surname must not contain numbers";
if (string.IsNullOrWhiteSpace(Company))
return "Company cannot be empty";
if (string.IsNullOrWhiteSpace(ReasonOfVisit))
return "Reason of visit cannot be empty";
if (ReasonOfVisit == "Other" && string.IsNullOrWhiteSpace(OtherReason))
return "Other Reason cannot be empty";
if (ReasonOfVisit == "Other" && Regex.IsMatch(OtherReason, @"\d"))
return "Other Reason must not contain numbers";
if (string.IsNullOrWhiteSpace(PersonOfVisit))
return "Person of visit cannot be empty";
if (PersonOfVisit == "Other" && string.IsNullOrWhiteSpace(OtherPerson))
return "Other Person cannot be empty";
if (PersonOfVisit == "Other" && Regex.IsMatch(OtherPerson, @"\d"))
return "Other Person must not contain numbers";
return string.Empty;
}
private string GetSignOutValidationMessage()
{
if (string.IsNullOrWhiteSpace(Forename))
return "Forename cannot be empty";
if (Regex.IsMatch(Forename, @"\d"))
return "Forename must not contain numbers";
if (string.IsNullOrWhiteSpace(Surname))
return "Surname cannot be empty";
if (Regex.IsMatch(Surname, @"\d"))
return "Surname must not contain numbers";
return string.Empty;
}
private string GetGroupSignInValidationMessage()
{
if (string.IsNullOrWhiteSpace(_hostForename))
return "Host Forename cannot be empty";
if (Regex.IsMatch(_hostForename, @"\d"))
return "Host Forename must not contain numbers";
if (string.IsNullOrWhiteSpace(_hostSurname))
return "Host Surname cannot be empty";
if (Regex.IsMatch(_hostSurname, @"\d"))
return "Host Surname must not contain numbers";
if (!Regex.IsMatch(_membersOfGroup, @"^[a-zA-Z]+$"))
return "Group members must not contain numbers.";
if (string.IsNullOrWhiteSpace(Company))
return "Company cannot be empty";
if (string.IsNullOrWhiteSpace(ReasonOfVisit))
return "Reason of visit cannot be empty";
if (ReasonOfVisit == "Other" && string.IsNullOrWhiteSpace(OtherReason))
return "Other Reason cannot be empty";
if (ReasonOfVisit == "Other" && Regex.IsMatch(OtherReason, @"\d"))
return "Other Reason must not contain numbers";
if (string.IsNullOrWhiteSpace(PersonOfVisit))
return "Person of visit cannot be empty";
if (PersonOfVisit == "Other" && string.IsNullOrWhiteSpace(OtherPerson))
return "Other Person cannot be empty";
if (PersonOfVisit == "Other" && Regex.IsMatch(OtherPerson, @"\d"))
return "Other Person must not contain numbers";
return string.Empty;
}
private string GetGroupSignOutValidationMessage()
{
if (string.IsNullOrWhiteSpace(_hostForename))
return "Host Forename cannot be empty";
if (Regex.IsMatch(_hostForename, @"\d"))
return "Host Forename must not contain numbers";
if (string.IsNullOrWhiteSpace(_hostSurname))
return "Host Surname cannot be empty";
if (Regex.IsMatch(_hostSurname, @"\d"))
return "Host Surname must not contain numbers";
if (!Regex.IsMatch(_membersOfGroup, @"^[a-zA-Z]+$"))
return "Group members must not contain numbers.";
return string.Empty;
}
public bool IsOtherReasonVisible => _reasonOfVisit == "Other";
public bool IsOtherPersonVisible => _personOfVisit == "Other";
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... -viewmodel
Как проверить на просмотр/viewmodel ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Вызов нескольких функций ViewModel на экране против одной функции ViewModel
Anonymous » » в форуме Android - 0 Ответы
- 52 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Вызов нескольких функций ViewModel на экране против одной функции ViewModel
Anonymous » » в форуме Android - 0 Ответы
- 85 Просмотры
-
Последнее сообщение Anonymous
-