Знать, когда «Datacontext» изменяется в коде позади UserControl - PullRequest
7 голосов
/ 29 ноября 2011

Я создаю пользовательский контроль для lightwitch.По сути, это пользовательский контроль Silverlight, который получает businessObject в свойстве «DataContext».

Я могу без проблем связывать сторонние элементы xaml, но в коде я не знаю, как получитьсообщил, когда dataContext изменился?

Мне нужно это для одной специальной привязки.

Большое спасибо!

Ответы [ 2 ]

7 голосов
/ 29 ноября 2011

Вы можете расширить класс управления (UserControl в вашем случае) и добавить новую DependencyProperty оболочку DataContext, чтобы выставить PropertyChanged. См. эти три сообщений и этого вопроса . Кроме того, это может быть случай, когда вам не нужно слушать DataContextChanged, в зависимости от того, что вы пытаетесь сделать, так как это может быть более уместным для обработки изменений в вашей модели.

Наконец, если у вас есть терпение и возможность, я слышу, что SL 5 выставляет DataContextChanged.

2 голосов
/ 05 декабря 2011

Боюсь, вы не сможете снова установить статическое поле только для чтения, если вы не сделаете это с "новым".

Возможно, вы сможете перехватить 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);

Спасибо

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