0

ビュー モデル内のプロパティに対してカスタム検証を機能させようとしていますが、検証ロジックのブレークポイントに達していないようです。以前に作成した別の検証 (モデルで使用し、機能した) を使用して、検証ロジックを入力して、ニーズに合わせてカスタマイズできるようにしています。

検証:

    [Required]
    [CustomValidation(typeof(CardRangeValidator), "CrossValidateFirstWithLast")]

財産:

    public const string ExpiresOnPropertyName = "ExpiresOn";

    private DateTime? expiresOn = DateTime.Today.AddYears(1);

    /// <summary>
    /// Gets the ExpiresOn property.
    /// TODO Update documentation:
    /// Changes to that property's value raise the PropertyChanged event. 
    /// This property's value is broadcasted by the Messenger's default instance when it changes.
    /// </summary>
    public DateTime? ExpiresOn
    {
        get
        {
            return expiresOn;
        }

        set
        {
            if (expiresOn == value)
            {
                return;
            }

            expiresOn = value;

            RaisePropertyChanged(ExpiresOnPropertyName);
        }
    }

検証ロジック:

using System.ComponentModel.DataAnnotations;

namespace Fsc.Feenics.Clients.Silverlight2.Web.Models.Shared
{
public class CardRangeValidator
{
    public static ValidationResult CrossValidateFirstWithLast(int number,     ValidationContext context)
    {
        var cardRangeInfo = context.ObjectInstance as CardRangeInfo;
        if (cardRangeInfo == null) return ValidationResult.Success;
        return ValidateFirstLessThanLast(number, cardRangeInfo.Last);
    }

    public static ValidationResult CrossValidateLastWithFirst(int number, ValidationContext context)
    {
        var cardRangeInfo = context.ObjectInstance as CardRangeInfo;
        if (cardRangeInfo == null) return ValidationResult.Success;
        return ValidateFirstLessThanLast(cardRangeInfo.First, number);
    }

    private static ValidationResult ValidateFirstLessThanLast(int firstNumber, int lastNumber)
    {
        return firstNumber <= lastNumber ? ValidationResult.Success : new ValidationResult("First number in range must be less than or equal to last number in range", new string[] { "First", "Last" });
    }
}
}
4

0 に答える 0