Подпишись на наш Twitter

Быть в курсе появления новых статей!

Класс который реализует зависимое свойство (dependency property), может также предоставлять метод обратного вызова для coercion, которое указывается при регистрации свойства. Coercion callback вызывается перед получением свойством нового значения и дает классу возможность принудительно изменить значение свойства на другое значение.

Вы укажите метод обратного вызова валидации при регистрации зависимого свойства, используя делегат CoerceValueCallback.

PropertyMetadata ageMetadata =
    new PropertyMetadata(
        18,     // Default value
        new PropertyChangedCallback(OnAgeChanged),
        new CoerceValueCallback(OnAgeCoerceValue));    // ** allow class to coerce value

// Register the property
AgeProperty =
    DependencyProperty.Register(
        "Age",                 // Property's name
        typeof(int),           // Property's type
        typeof(Person),        // Defining class' type
        ageMetadata,           // Defines default value & changed/coercion callbacks  (optional)
        new ValidateValueCallback(OnAgeValidateValue));   // validation (optional)

Вы можете использовать coercion для принудительной установки минимального и максимального значения свойства.

private static object OnAgeCoerceValue
    (DependencyObject depObj, object baseValue)
{
    int coercedValue = (int)baseValue;

    if ((int)baseValue > 120)
        coercedValue = 120;

    if ((int)baseValue < 1)
        coercedValue = 1;

    return coercedValue;
}

Оригинал: #123 – Coercing a Dependency Property




Дата публикации: 12.11.2010 20:59

Ярлыки: Dependency Property, Validation, WPF