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