Когда оценивается привязка данных в WPF? - PullRequest
0 голосов
/ 22 августа 2011

Я связываю свойство CustomerID в моем пользовательском элементе управления с тем же свойством в предке.Предком является TopLevelControl.

Я установил привязку в конструкторе дочернего элемента управления и получил доступ к свойству в OnApplyTemplate (), где я также выполняю некоторую другую инициализацию.Но мне кажется, что привязка не оценивается при вызове OnApplyTemplate ().Почему и когда он обновляется с помощью привязки?

Мой CustomChildControl:

public String CustomerID {
  get{ return (bool) base.GetValue(CustomerIDProperty);}
  set{ base.SetValue(CustomerIDProperty, value);}
}

public CustomChildControl()
{
     binding = new Binding("CustomerID")
     { 
         RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(TopLevelControl),1)
     };
     SetBinding(CustomerIDProperty, binding);
}

override OnApplyTemplate(){

   base.OnApplyTemplate();
   // CustomerID is null here... why? 

   Initialize(CustomerID);
}

1 Ответ

4 голосов
/ 22 августа 2011

Причина в том, что элементы управления не добавляются в визуальное дерево до тех пор, пока они не будут инициализированы.Поскольку вы привязываете элемент управления к предку, источник данных (предок) не существует (с точки зрения элемента управления) до тех пор, пока элемент управления не будет добавлен в визуальное дерево (после выполнения ApplyTemplate).Я бы рекомендовал переместить этот код в событие Load.

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