Я не знаю, было ли это когда-либо решено или нет, но если вы устанавливаете значение в файле XAML, который его использует, существуют определенные обстоятельства, когда значение по умолчанию для кода процедуры будет иметь прецедент, и оно никогда не сработает установить в XAML изначально. Так что удалите значение по умолчанию -1, чтобы
private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
"ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata(-1, new PropertyChangedCallback(IDChanged)));
становится
private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
"ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata( new PropertyChangedCallback(IDChanged)));