Я только начал играть с 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.