«Ответ» выше, на мой взгляд, не отвечает на реальный вопрос, и на самом деле оригинальный вопрос указывает на то, что у автора вопроса уже было очень эффективное решение проблемы. Однако предоставленный «ответ» просто показывает, как прикрепить подобъект к TreeViewItem и как впоследствии отобразить его, используя пользовательский метод. Хотя это полезно, этот ответ не затрагивает фактическую природу исходного вопроса.
Существует много сценариев, в которых TreeViewItem должен иметь прикрепленный внешний объект, который не принадлежит списку Items TreeViewItem. Это облегчает доступ к присоединенному внешнему объекту для конкретных приложений, когда пользователь выбирает TreeViewItem из TreeView. Эта концепция полностью отличается от идеи добавления подобъектов в TreeViewItem.
Альтернативный метод решения этой проблемы, в отличие от решения, первоначально реализованного автором вопроса, заключается в создании подкласса класса TreeViewItem и добавлении пользовательской информации, такой как прикрепленный объект. Этот принцип иллюстрируется в статье http://msdn.microsoft.com/en-us/library/1330h6a4.aspx. После реализации этого пользовательского подкласса TreeViewItem этот подкласс может быть добавлен в список элементов либо TreeView, либо TreeViewItem. Когда пользователь выбирает элемент из TreeView, возвращаемый из выбора объект будет пользовательским подклассом, который будет содержать любую пользовательскую информацию, определенную подклассом.
Дополнительным преимуществом использования пользовательского подкласса TreeViewItem вместо TreeViewItem является то, что подклассом может быть реализовано пользовательское поведение. Например, чтобы отобразить пользовательскую подсказку, когда пользователь наводит указатель мыши на элемент, подкласс может установить для себя объект ToolTip с кодом, подобным следующему:
ToolTip tip = new ToolTip() { Content = "Tooltip display value" };
ToolTipService.SetToolTip(this, tip);