Zoeken…


DisplayNameAttribute (weergaveattribuut)

DisplayName stelt de weergavenaam in voor een eigenschap, gebeurtenis of openbare ongeldige methode met nul (0) argumenten.

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

Eenvoudig gebruiksvoorbeeld in XAML-toepassing

<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();
        }
    }
}

voer hier de afbeeldingsbeschrijving in

EditableAttribute (kenmerk voor gegevensmodellering)

EditableAttribute stelt in of gebruikers de waarde van de klasse-eigenschap moeten kunnen wijzigen.

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

Eenvoudig gebruiksvoorbeeld in XAML-toepassing

<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();
        }
    }
}

bewerkbare

Validatiekenmerken

Validatie-attributen worden gebruikt om verschillende validatieregels op declaratieve wijze af te dwingen bij klassen of klassenleden. Alle validatiekenmerken zijn afgeleid van de basisklasse ValidationAttribute .


Voorbeeld: RequiredAttribute

Wanneer gevalideerd via de methode ValidationAttribute.Validate , retourneert dit kenmerk een fout als de eigenschap Name null is of alleen witruimte bevat.

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

Voorbeeld: StringLengthAttribute

Het StringLengthAttribute valideert als een string kleiner is dan de maximale lengte van een string. Het kan optioneel een minimale lengte specificeren. Beide waarden zijn inclusief.

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

Voorbeeld: RangeAttribute

De RangeAttribute geeft de maximale en minimale waarde voor een numeriek veld.

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

Voorbeeld: CustomValidationAttribute

Met de klasse CustomValidationAttribute kan een aangepaste static methode worden gebruikt voor validatie. De aangepaste methode moet static ValidationResult [MethodName] (object input) .

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

Methode verklaring:

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;
    }
}

Een aangepast validatiekenmerk maken

Aangepaste validatiekenmerken kunnen worden gemaakt door af te leiden van de basisklasse ValidationAttribute en vervolgens virtual methoden te vervangen als dat nodig is.

[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;
    }
}

Dit kenmerk kan vervolgens als volgt worden gebruikt:

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

Basisinformatie over gegevensannotatie

Gegevensaantekeningen zijn een manier om meer contextuele informatie toe te voegen aan klassen of leden van een klasse. Er zijn drie hoofdcategorieën annotaties:

  • Validatiekenmerken: voeg validatiecriteria toe aan gegevens
  • Weergaveattributen: geef op hoe de gegevens aan de gebruiker moeten worden weergegeven
  • Attributen modelleren: informatie toevoegen over gebruik en relatie met andere klassen

Gebruik

Hier is een voorbeeld waarbij twee ValidationAttribute en één DisplayAttribute worden gebruikt:

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; }
}

Gegevensannotaties worden meestal gebruikt in frameworks zoals ASP.NET. Wanneer in ASP.NET MVC bijvoorbeeld een model wordt ontvangen via een controllermethode, kan ModelState.IsValid() worden gebruikt om te bepalen of het ontvangen model al zijn ValidationAttribute respecteert. DisplayAttribute wordt ook gebruikt in ASP.NET MVC om te bepalen hoe waarden op een webpagina worden weergegeven.

Voer validatiekenmerken handmatig uit

Meestal worden validatiekenmerken gebruikt in frameworks (zoals ASP.NET). Die kaders zorgen voor de uitvoering van de validatiekenmerken. Maar wat als u validatiekenmerken handmatig wilt uitvoeren? Gebruik gewoon de Validator klasse (geen reflectie nodig).

Validatie context

Elke validatie heeft een context nodig om wat informatie te geven over wat wordt gevalideerd. Dit kan verschillende informatie bevatten, zoals het te valideren object, enkele eigenschappen, de naam die in het foutbericht moet worden weergegeven, enz.

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

Nadat de context is gemaakt, zijn er meerdere manieren om validatie uit te voeren.

Valideer een object en al zijn eigenschappen

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

Een eigenschap van een object valideren

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

En meer

Zie voor meer informatie over handmatige validatie:



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow