Боюсь, вы не сможете снова установить статическое поле только для чтения, если вы не сделаете это с "новым".
Возможно, вы сможете перехватить DataContext, измененный через привязку данных к свойству зависимости DataContext.
например Зарегистрируйте новый дп с именем «MyDataContext» и создайте привязку.
DataContext является источником привязки, а MyDataContext является целью привязки, то есть DataContext ---> MyDataContext. Таким образом, каждый раз, когда DataContext вы будете получать обратный вызов MyDataContext dp изменен. Я думаю, что это сработает, но не проверено.
код похож на:
// dp declaration..
public static readonly DependencyProperty MyDataContextProperty = DependencyProperty.Register(null, "MyDataContext", typeof(object), typeof(MyControl), new PropertyMetadata(MyDataContextChangedCallback));
// create binding in constructor or initialization.
Binding binding = new Binding("DataContext");
BindingOperations.SetBinding(this, MyDataContextProperty, binding);
Спасибо