Поведение Silverlight: DataContext изменений AssociatedObject - PullRequest
2 голосов
/ 04 февраля 2011

Я написал поведение интерактивности (из 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 работать своим волшебством.

Что я делаю не так?

1 Ответ

2 голосов
/ 04 февраля 2011

Вы пробовали что-то попроще: -

  BindingOperations.SetBinding(this, SourceProperty, new Binding());

Это должно дать вам объект DataContext. Привязка без Path возвращает исходный объект. Привязка без явного Source возвращает текущий DataContext.

Вопрос в том, получает ли DataContext из this (поведение) свое значение от DataGrid, к которому он привязан? Я думаю, что это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...