2

У меня есть <ItemsControl> с обычным <DataTemplate> (а также обычным <ItemsPanelTemplate>, который является всего лишь WrapPanel), связанный через ItemsSource с простой наблюдаемой коллекцией строк.Как получить экземпляр шаблонного элемента из базы данных ItemsControl? (WPF)

DataTemplate состоит просто из экземпляра пользовательского UserControl, свойства которого привязаны к строке через {Binding}.

Проблема в том, что мои элементы данных являются просто строками, мне нужно напрямую обращаться к экземплярам моего UserControl, но я не могу понять, как это сделать!

Я пробовал:

var item = tagBar.Items[ tagBar.Items.Count - 1 ]; 

... но это просто возвращает строку. Также:

var item2 = tagBar.ItemContainerGenerator.ContainerFromIndex(tagBar.Items.Count - 1); 

... возвращает ContentPresenter, и я не могу понять, что делать с ContentPresenter, чтобы получить к экземпляру моего UserControl.

??

Это похоже на this question, но на него никогда не отвечали должным образом, а также было связано с Silverlight, тогда как это WPF.

+0

Прежде чем кто-нибудь подскажет это, item2.Content просто вернет строку. * вздох * – devios1 2008-12-05 03:37:54

ответ

2

Ответ, который я написал over here, касается фокусировки элемента внутри DataTemplate, но он должен предоставить необходимый код. Это предполагает использование метода FindName на вашем DataTemplate, чтобы найти в нем элемент управления. Если вы дадите свое UserControl имя, вы должны быть правы.

+0

Отлично, вот и все! Ключ передавал `item` (вернее` item2` в моем вышеприведенном коде) обратно в `tagBar.ItemTemplate.FindName()` (и, конечно же, давая `UserControl` имя, которое будет найдено). Я также буду осторожен с битом IsLoaded, хотя это так хромает, что это необходимо. Спасибо! – devios1 2008-12-05 03:50:31