OverrideMetadata
не должно быть обязательным в статическом конструкторе (но он должен быть там).Вы можете поместить это, например, в Button.Click
обработчик событий.
PropertyChangedCallback не может быть статической функцией
Это неправильно.PropertyChangedCallback может быть статической функцией.
Проблема в том, что, если кто-то уже зарегистрировал / переопределил метаданные для свойства, вы получите исключение.
См. На MSDN:
Кроме того, метаданные могут быть переопределены только один раз для каждого типа.Последующие попытки переопределить метаданные для того же типа вызовут исключение.
Для отслеживания изменений в DataContext просто используйте соответствующее событие ContentControl.DataContextChanged
.
<ContentControl DataContextChanged="OnDataContextChanged">
Чтобы избежать кода позадииспользуйте обработку поведения DataContextChanged
.