WPF: доступ к «DataTemplate» DataContext для DataContext

#wpf #listbox #datatemplate #datacontext #itemscontrol

#wpf #listbox #datatemplate #datacontext #itemscontrol

Вопрос:

У меня есть ListBox , который заполняется ItemsSource ( ObservableCollection<MyClass> ) . Если у меня есть ссылка на конкретный ListBoxItem объект, я могу легко найти его объект данных DataContext , что даст мне соответствующий MyClass объект.

Теперь я хочу изменить это. Я хочу получить ListBoxItem то, что представляет конкретный экземпляр MyClass объекта. Есть ли какой-нибудь способ добиться этого?

Комментарии:

1. Лично для меня вопрос неясен. Не могли бы вы добавить сегменты кода с пояснениями?

Ответ №1:

Используйте ContainerFromItem метод списка ItemContainerGenerator :

 MyClass item = ...
var listBoxItem = (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromItem(item);
  

Комментарии:

1. Я попробовал это на равнине ItemsControl , он дал мне равнину ContentPresenter , которая имеет свойство MyClass in Content . Знаете ли вы, как изменить этот «контейнер» по умолчанию для пользовательских ItemsControl файлов?

2. Вам нужно будет получить результат из ItemsControl (или ListBox и т. Д.) И переопределить метод GetContainerForItemOverride .