Какой смысл использовать DependencyProperty, для которого ownerType не является DependencyObject? - PullRequest
7 голосов
/ 25 февраля 2011

Я только начал играть с DependencyProperties в WPF, и мне хотелось проверить пару мыслей, пока я с ними разбираюсь.

Учитывая следующее (и игнорируя соглашение об именах на данный момент):

class MyTestClass
{
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}

Я обнаружил, что dp2 генерирует исключение TypeInitializationException с сообщением "MyTestClass", тип должен быть производным от DependencyObject ", который я ожидал, но dp1 принимается довольно счастливо.

Теперь я понимаю, почему dp2 вызывает исключение, поскольку я пытаюсь зарегистрировать метаданные свойства для типа, который не является DependencyObject, и это нормально. Я посмотрел под одеялом и вижу путь к коду, которому следуют и dp1, и dp2, поэтому я понимаю с точки зрения кода, почему dp1 не вызывает исключение, но концептуально я ожидал, что и dp1, и dp2 вызовут одно и то же исключение.

Мой вопрос заключается в том, какой смысл в создании DependencyProperty, например dp1, для которого ownerType не является DependencyObject, поскольку я не могу понять, как его можно использовать без методов GetValue / SetValue для объекта DependencyObject.

1 Ответ

3 голосов
/ 25 февраля 2011

Редактировать
Причиной первой регистрации-подписи является регистрация DependencyProperty, который не имеет значения по умолчанию, которое может быть восстановлено методом Clear, а также не имеет зарегистрированногообратный вызов изменения значения.

Поскольку значения по умолчанию нет, проверка правильности значения по умолчанию не будет и, следовательно, исключение не будет выброшено.Однако нет смысла в такой регистрации.Вы не получите от этого никакой пользы, и тот факт, что оно не создает исключение, не означает, что это хорошо для чего-то - это только не неправильно.

...