DependencyPropertyChangedEventArgs Класс

Определение

Предоставляет данные для реализации PropertyChangedCallback , которая вызывается при изменении значения свойства зависимостей. Также предоставляет данные события для события Control.IsEnabledChanged и любого другого события, использующего делегат DependencyPropertyChangedEventHandler .

public ref class DependencyPropertyChangedEventArgs sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyPropertyChangedEventArgs final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class DependencyPropertyChangedEventArgs final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyPropertyChangedEventArgs
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class DependencyPropertyChangedEventArgs
Public NotInheritable Class DependencyPropertyChangedEventArgs
Наследование
Object Platform::Object IInspectable DependencyPropertyChangedEventArgs
Атрибуты

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

В этом примере показана реализация PropertyChangedCallback , использующая данные события DependencyPropertyChangedEventArgs. В частности, он использует NewValue для задания связанного свойства, которое отображает базовое числовое значение DependencyProperty в виде текста в элементе TextBlock составного элемента управления.

private static void ValueChangedCallback(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
    NumericUpDown ctl = (NumericUpDown)obj;
    Int32 newValue = (Int32)args.NewValue;

    // Update the TextElement to the new value.
    if (ctl.TextElement != null)
    {
        ctl.TextElement.Text = newValue.ToString();
    }

Private Shared Sub ValueChangedCallback(ByVal obj As DependencyObject, _
                    ByVal args As DependencyPropertyChangedEventArgs)

    Dim ctl As NumericUpDown = DirectCast(obj, NumericUpDown)
    Dim newValue As Integer = args.NewValue

    ' Update the TextElement to the new value. 
    If ctl.TextElement IsNot Nothing Then
        ctl.TextElement.Text = newValue.ToString()
    End If

Комментарии

DependencyPropertyChangedEventArgs предоставляет данные для двух разных ситуаций, связанных с изменением значений свойств зависимостей:

  • Сведения о ситуационных вызовах, используемые PropertyChangedCallback для настраиваемого свойства зависимостей. Это наиболее распространенный случай.
  • Данные события для события на основе DependencyPropertyChangedEventHandler. Это менее распространено, так как единственным событием среда выполнения Windows, использующим этот делегат, является событие Control.IsEnabledChanged. Дополнительные сведения об использовании данных события DependencyPropertyChangedEventArgs в этом случае см. в разделе DependencyPropertyChangedEventHandler или Control.IsEnabledChanged.

Реализация PropertyChangedCallback является необязательной частью метаданных свойства, которые вы предоставляете при регистрации свойства зависимостей. Обратный вызов вызывается системой свойств зависимостей внутри системы. Дополнительные сведения о свойствах зависимостей в целом см. в разделах Пользовательские свойства зависимостей и Общие сведения о свойствах зависимостей.

Обычно метод определяется с частным или внутренним доступом. Метод должен быть статическим. Так как метод является статическим, параметр DependencyObject (d) делегата PropertyChangedCallback имеет важное значение. Это то, что идентифицирует конкретный экземпляр объекта зависимостей, в котором изменяется свойство. Для многих операций, таких как исправление или принудиние значения или изменение другого вычисляемого значения свойства в ответ на тот же объект, вы будете ссылаются на этот DependencyObject. Обычно требуется привести его к типу владельца изменяющегося свойства. Тип владельца — это тип, на который ссылается имя в вызове DependencyProperty.Register ; метаданные, которым свойству PropertyChangedCallback присваивается метаданные свойства, являются частью того же вызова.

Помните о возможности рекурсии. Если изменить значение свойства зависимостей, для который вызывается PropertyChangedCallback , оно будет вызываться снова. Например, если вы создали обратный вызов для свойства Double , где обратный вызов всегда делит значение на 2, этот обратный вызов будет вызываться рекурсивно, а ваше приложение будет находиться в бесконечном цикле.

Допустимо иметь два или более разных свойства зависимостей, определяющих обратные вызовы, чтобы изменить друг друга, но опять же будьте осторожны, чтобы не создать непреднамеренно циклическую зависимость, которая не позволяет стабилизировать значения.

PropertyChangedCallback вызывается только в том случае, если OldValue и NewValue в данных события отличаются.

OldValue и NewValue бывают нетипизированными, поэтому для любого сравнения, вероятно, потребуется приведение. Многие значения свойств зависимостей используют тип значения, что означает, что для сравнения вы будете полагаться на операторы или другой API типа значения. Эта функция обычно доступна в структуре, представляющей значение, в виде API служебной программы. Например, api служебной программы для конкретного языка для значения Толщины позволяет сравнивать значения Толщины .

Примечание

При программировании на C++ некоторые структуры среда выполнения Windows не поддерживают элементы, не являющиеся данными, поэтому не поддерживают операторы или другую служебную программу. Для них существует вспомогательный класс Helper , который предоставляет API сравнения, который может использовать код C++. Например, используйте класс ColorHelper для сравнения значений Color .

Использование DependencyPropertyChangedEventArgs для пользовательского события

Реализующий пользовательский элемент управления может использовать DependencyPropertyChangedEventHandler в качестве типа делегата, если пользовательское событие создается в результате изменения значения свойства зависимостей. Такое событие можно запускать только из контекста PropertyChangedCallback. Это связано с тем, что измененное значение (свойство, старое и новое) должно находиться в DependencyPropertyChangedEventArgs, которые сообщаются для события на уровне системы свойств. Но для DependencyPropertyChangedEventArgs нет конструкторов, и ни одно из его свойств не настраивается, поэтому единственный способ получить значение DependencyPropertyChangedEventArgs — получить его из исходных параметров PropertyChangedCallback и передать его при запуске пользовательского события.

Свойства

NewValue

Возвращает значение свойства зависимостей после указанного изменения.

OldValue

Возвращает значение свойства зависимостей перед сообщаемого изменения.

Property

Возвращает идентификатор свойства зависимостей, в котором произошло изменение значения.

Применяется к

См. также раздел