Хранение объекта в TreeViewItem?

#c# #object #silverlight-4.0 #treeviewitem

#c# #объект #silverlight-4.0 #treeviewitem

Вопрос:

Я хочу сохранить экземпляр класса в TreeViewItem, чтобы мне не приходилось заставлять программу сортировать список возможных выбранных для него элементов.

Т.е. что-то, что может выглядеть как

 Bagel Poppyseed = new Bagel();    
TreeViewItem TreeViewPoppyseed = new TreeViewItem();
TreeViewPoppyseed.Bagel = Poppyseed;
  

Таким образом, всякий раз, когда выбирается TreeViewPoppyseed, не было бы необходимости запускать другой метод, чтобы получить экземпляр Bagel, который у него есть. Это может быть просто как TreeView.SelectedItem.Bagel;

Что-то подобное уже существует?

Ответ №1:

Для этого и предназначено Tag свойство, вы можете поместить туда свой объект и извлечь его позже.

Смотрите здесь:http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.tag.aspx

Кроме того, если ваши данные привязаны к этому объекту, то это было бы в DataContext свойстве.

Ответ №2:

Вы можете создать шаблон данных для элемента древовидного представления, а затем вы можете получить доступ к свойству DataContext, чтобы получить связанный объект.

в обработчике событий:

 TreeViewItem tvi = (TreeViewItem)sender;
Bagel bagel = (Bagel)tvi.DataContext;
//do whatever you want with bagel and tree view item