수색…


DisplayNameAttribute (표시 특성)

DisplayName 은 속성, 이벤트 또는 제로 (0) 인수가있는 public void 메서드의 표시 이름을 설정합니다.

public class Employee
{
    [DisplayName(@"Employee first name")]
    public string FirstName { get; set; }
}

XAML 응용 프로그램의 간단한 사용 예

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication="clr-namespace:WpfApplication"
        Height="100" Width="360" Title="Display name example">

    <Window.Resources>
        <wpfApplication:DisplayNameConverter x:Key="DisplayNameConverter"/>
    </Window.Resources>

    <StackPanel Margin="5">
        <!-- Label (DisplayName attribute) -->
        <Label Content="{Binding Employee, Converter={StaticResource DisplayNameConverter}, ConverterParameter=FirstName}" />
        <!-- TextBox (FirstName property value) -->
        <TextBox Text="{Binding Employee.FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
    </StackPanel>
    
</Window>

namespace WpfApplication
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private Employee _employee = new Employee();

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
        }

        public Employee Employee
        {
            get { return _employee; }
            set { _employee = value; }
        }
    }
}

namespace WpfApplication
{
    public class DisplayNameConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // Get display name for given instance type and property name
            var attribute = value.GetType()
                .GetProperty(parameter.ToString())
                .GetCustomAttributes(false)
                .OfType<DisplayNameAttribute>()
                .FirstOrDefault();

            return attribute != null ? attribute.DisplayName : string.Empty;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

여기에 이미지 설명을 입력하십시오.

EditableAttribute (데이터 모델링 속성)

EditableAttribute 는 사용자가 클래스 속성의 값을 변경할 수 있어야하는지 여부를 설정합니다.

public class Employee
{
    [Editable(false)]
    public string FirstName { get; set; }
}

XAML 응용 프로그램의 간단한 사용 예

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfApplication="clr-namespace:WpfApplication"
        Height="70" Width="360" Title="Display name example">

    <Window.Resources>
        <wpfApplication:EditableConverter x:Key="EditableConverter"/>
    </Window.Resources>

    <StackPanel Margin="5">
        <!-- TextBox Text (FirstName property value) -->
        <!-- TextBox IsEnabled (Editable attribute) -->
        <TextBox Text="{Binding Employee.FirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                 IsEnabled="{Binding Employee, Converter={StaticResource EditableConverter}, ConverterParameter=FirstName}"/>
    </StackPanel>
    
</Window>

namespace WpfApplication
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private Employee _employee = new Employee() { FirstName = "This is not editable"};

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
        }

        public Employee Employee
        {
            get { return _employee; }
            set { _employee = value; }
        }
    }
}

namespace WpfApplication
{
    public class EditableConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // return editable attribute's value for given instance property,
            // defaults to true if not found
            var attribute = value.GetType()
                .GetProperty(parameter.ToString())
                .GetCustomAttributes(false)
                .OfType<EditableAttribute>()
                .FirstOrDefault();

            return attribute != null ? attribute.AllowEdit : true;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

편집 가능한

유효성 검사 속성

유효성 검사 속성은 클래스 또는 클래스 멤버에 대해 선언적 방식으로 다양한 유효성 검사 규칙을 적용하는 데 사용됩니다. 모든 유효성 검사 속성은 ValidationAttribute 기본 클래스에서 파생됩니다.


예 : RequiredAttribute

ValidationAttribute.Validate 메소드를 통해 유효성을 ValidationAttribute.Validate 할 때 Name 속성이 null이거나 공백 만 포함하면이 특성은 오류를 반환합니다.

public class ContactModel
{
    [Required(ErrorMessage = "Please provide a name.")]
    public string Name { get; set; }
}

예 : StringLengthAttribute

StringLengthAttribute 는 문자열이 문자열의 최대 길이보다 작은 경우 유효성을 검사합니다. 선택적으로 최소 길이를 지정할 수 있습니다. 두 값은 모두 포함됩니다.

public class ContactModel
{
    [StringLength(20, MinimumLength = 5, ErrorMessage = "A name must be between five and twenty characters.")]
    public string Name { get; set; }
}

예 : RangeAttribute

RangeAttribute 는 숫자 필드의 최대 값과 최소값을 제공합니다.

public class Model
{
    [Range(0.01, 100.00,ErrorMessage = "Price must be between 0.01 and 100.00")]
    public decimal Price { get; set; }
}

예 : CustomValidationAttribute

CustomValidationAttribute 클래스를 사용하면 유효성 검사를 위해 사용자 지정 static 메서드를 호출 할 수 있습니다. 사용자 지정 메서드는 static ValidationResult [MethodName] (object input) 이어야합니다.

public class Model
{
    [CustomValidation(typeof(MyCustomValidation), "IsNotAnApple")]
    public string FavoriteFruit { get; set; }
}

메소드 선언 :

public static class MyCustomValidation
{
    public static ValidationResult IsNotAnApple(object input)
    {
        var result = ValidationResult.Success;

        if (input?.ToString()?.ToUpperInvariant() == "APPLE")
        {
            result = new ValidationResult("Apples are not allowed.");
        }

        return result;
    }
}

사용자 정의 유효성 검사 속성 만들기

ValidationAttribute 기본 클래스에서 파생 된 다음 필요에 따라 virtual 메서드를 재정 의하여 사용자 지정 유효성 검사 특성을 만들 수 있습니다.

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class NotABananaAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var inputValue = value as string;
        var isValid = true;

        if (!string.IsNullOrEmpty(inputValue))
        {
            isValid = inputValue.ToUpperInvariant() != "BANANA";
        }

        return isValid;
    }
}

이 속성은 다음과 같이 사용할 수 있습니다.

public class Model
{
    [NotABanana(ErrorMessage = "Bananas are not allowed.")]
    public string FavoriteFruit { get; set; }
}

데이터 주석 기본 사항

데이터 주석은 클래스 또는 클래스 멤버에게 문맥 정보를 추가하는 한 방법입니다. 주석에는 세 가지 주요 범주가 있습니다.

  • 유효성 검사 속성 : 데이터에 유효성 검사 기준을 추가합니다.
  • 표시 속성 : 사용자에게 데이터를 표시하는 방법 지정
  • 모델링 속성 : 다른 클래스와 사용 및 관계에 대한 정보를 추가하십시오.

용법

다음은 두 개의 ValidationAttributeDisplayAttribute 가 사용 된 예제입니다.

class Kid
{
    [Range(0, 18)] // The age cannot be over 18 and cannot be negative
    public int Age { get; set; }
    [StringLength(MaximumLength = 50, MinimumLength = 3)] // The name cannot be under 3 chars or more than 50 chars
    public string Name { get; set; }
    [DataType(DataType.Date)] // The birthday will be displayed as a date only (without the time)
    public DateTime Birthday { get; set; }
}

데이터 주석은 주로 ASP.NET과 같은 프레임 워크에서 사용됩니다. 예를 들어 ASP.NET MVC 에서 컨트롤러 메서드로 모델을 수신하면 ModelState.IsValid() 를 사용하여받은 모델이 해당 ValidationAttribute 모두 ModelState.IsValid() 하는지 확인할 수 있습니다. 또한 DisplayAttributeASP.NET MVC 에서 웹 페이지에 값을 표시하는 방법을 결정하는 데 사용됩니다.

유효성 검사 특성 수동 실행

대부분의 경우 유효성 검사 특성은 ASP.NET과 같은 프레임 워크 내에서 사용됩니다. 이러한 프레임 워크는 유효성 검사 속성을 실행합니다. 하지만 유효성 검사 속성을 수동으로 실행하려면 어떻게해야합니까? Validator 클래스를 사용하면됩니다 (리플렉션 필요 없음).

유효성 확인 컨텍스트

모든 유효성 검사에는 유효성 확인 대상에 대한 정보를 제공하는 컨텍스트가 필요합니다. 여기에는 유효성 검사 대상, 일부 속성, 오류 메시지에 표시 할 이름 등과 같은 다양한 정보가 포함될 수 있습니다.

ValidationContext vc = new ValidationContext(objectToValidate); // The simplest form of validation context. It contains only a reference to the object being validated.

컨텍스트가 만들어지면 여러 가지 방법으로 유효성 검사를 수행 할 수 있습니다.

개체 및 해당 속성의 유효성 검사

ICollection<ValidationResult> results = new List<ValidationResult>(); // Will contain the results of the validation
bool isValid = Validator.TryValidateObject(objectToValidate, vc, results, true); // Validates the object and its properties using the previously created context.
// The variable isValid will be true if everything is valid
// The results variable contains the results of the validation

객체의 속성 검증

ICollection<ValidationResult> results = new List<ValidationResult>(); // Will contain the results of the validation
bool isValid = Validator.TryValidatePropery(objectToValidate.PropertyToValidate, vc, results, true); // Validates the property using the previously created context.
// The variable isValid will be true if everything is valid
// The results variable contains the results of the validation

그리고 더

수동 유효성 검사에 대한 자세한 내용은 다음을 참조하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow