У меня есть пользовательский контроль. ControlTemplate
находится в файле Generic.xaml. Класс элемента управления содержит переопределение метода OnApplyTemplate
.
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var textBox = Template.FindName("PART_textBox", this) as TextBox;
if (textBox != null)
{
textBox.GotFocus += PART_textBox_GotFocus;
textBox.LostFocus += PART_textBox_LostFocus;
}
var grid = Template.FindName("PART_grid", this) as Grid;
if (grid != null)
{
grid.DataContext = this;
}
}
Корневым элементом в моем шаблоне элемента управления является Grid
. Я хочу установить контекст данных корневого элемента. Я переопределяю OnApplyTemplate
, чтобы иметь возможность прикреплять события к элементам управления в шаблоне и устанавливать контекст данных сетки.
Проблема возникает, когда в представлении используется мой пользовательский элемент управления. Во время инициализации элемента управления ошибки привязки отображаются в консоли. Все привязки из элементов управления в шаблоне настраиваемого элемента управления и контекста данных не выполняются в первый раз, поскольку контекст данных еще не установлен. Как только в пользовательском элементе управления вызывается OnApplyTemplate
(все еще говорится о «инициализации»), устанавливается текстовый текст данных, и все работает правильно. Это не видимая проблема, пользователь не заметит этого вообще. Но ошибки отображаются в консоли, что означает, что я делаю что-то не так. Установка DataContext в конструкторе пользовательского элемента управления не поможет, потому что (встроенное) свойство Template
на этом этапе не задано.
Я устанавливаю текстовый текст данных таблицы. к классу самого пользовательского элемента управления, что не рекомендуется, но это не изменит причину проблемы.