Я думаю, что лучший подход - это установить стиль для TreeView, который изменит шаблон TreeViewItems, чтобы получить желаемое изображение.
Шаблон, вероятно, должен быть StackPanel с элементом управления Image и label, вы привязываете изображение к своей иконке, а текст метки - к строкам из коллекции Observable.
Я скопировал соответствующий фрагмент кода из статьи проекта кода , в которой это рассматривается более подробно, но я думаю, что все, что вам нужно, это ниже (этот код находится в TreeView.Resources элемент).
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Name="img"
Width="20"
Height="20"
Stretch="Fill"
Source="image.png"/>
<TextBlock Text="{Binding}" Margin="5,0" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>