Будет ли свойство зависимости, измененное обратным вызовом, когда-либо возвращать неожиданный объект DependencyObject?

Я регистрируюсь для уведомления об обратном вызове в DependencyProperty типа MyObject. В этой функции я выполняю приведение из DependencyObject к ожидаемому типу MyObject. Это когда-нибудь вернет ноль? Могу ли я безопасно удалить нулевую проверку из моего кода?

private static void OnMyObjectChanged(DependencyObject d,
    DependencyPropertyChangedEventArgs e)
{
    MyObject obj = d as MyObject;
    if (obj != null) // Is this check needed?  Will it ever be null?
    {
        ...
    }
}

1 ответ

Решение

Что вы, вероятно, имеете в виду, это:

private static void OnMyObjectChanged(
    DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var obj = d as MyObject;
    if (obj != null)
    {
        ...
    }
}

Пока это не PropertyChangedCallback присоединенного свойства (которое может быть применено к объектам DependencyObject любого производного типа), можно безопасно напрямую привести параметр DependencyObject к типу вашего объекта. Это обратный вызов вашей собственности, и WPF никогда не вызывает его для какой-либо другой собственности.

Так что просто напишите:

private static void OnMyObjectChanged(
    DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var obj = (MyObject)d;
    ...
}
Другие вопросы по тегам