Я написал поведение интерактивности (из Blend SDK), которое можно присоединить к DataGrid и что-то делает со столбцами DataGrid на основе ViewModel в DataContext из DataGrid.
Поскольку DataContext можетустановить позже, я должен слушать изменения DataContext в поведении.Итак, я связал DependencyProperty с DataContext Ассоциированного DataGrid, например:
BindingOperations.SetBinding(this, SourceProperty, new Binding("DataContext") { Source = AssociatedObject });
Эта строка нажата, поэтому связывание действительно происходит.
Теперь сложная часть: если я позвоню
datagrid.DataContext = new MyViewModel();
, все работает отлично.Но если сетка данных содержится в некотором UserControl (не обязательно его непосредственном дочернем элементе) и я хочу вызвать
this.DataContext = new MyViewModel();
, обратный вызов свойства Source не запускается.Я отладил его, datagrid.DataContext установлен, поэтому DataContext наследуется через визуальное дерево, как и должно быть, если я вручную вызываю update для поведения, он видит DataContext, но автоматически ничего не происходит.
IЯ не хочу называть экземпляр DataGrid, я не хочу называть поведение, так как в одном UserControl может быть любое количество из них, я хочу установить DataContext UserControl и позволить системе DependencyProperty работать своим волшебством.
Что я делаю не так?