Do Hierarchical Data Template need INotifyPropertyChanged on property's property of observable collection type
<p>I have simple example, in which code behind is like this</p>

<pre><code>using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;

namespace WpfApplication7
{
    /// &lt;summary&gt;
    /// Логика взаимодействия для MainWindow.xaml
    /// &lt;/summary&gt;
    public partial class MainWindow : Window
    {
        public ObservableCollection&lt;Item&gt; Items { get; set; }

        public MainWindow()
        {
            Items = new ObservableCollection&lt;Item&gt;();
            InitializeComponent();
        }

        private void ButtonBase1_OnClick(object sender, RoutedEventArgs e)
        {
            Items.Add(new Item() { ItemName = DateTime.Now.ToString(), SubItems = new ObservableCollection&lt;string&gt;() {"1"} });
        }

        private void ButtonBase2_OnClick(object sender, RoutedEventArgs e)
        {
            var f = Items.FirstOrDefault();
            if (f!=null)
                f.SubItems.Add(f.SubItems.Count.ToString());
        }
    }

    public class Item
    {
        public string ItemName { get; set; }
        public ObservableCollection&lt;string&gt; SubItems { get; set; }
    }
}
</code></pre>

<p>and XAML is like that</p>

<pre><code>&lt;Window x:Class="WpfApplication7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication7"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525"  DataContext="{Binding RelativeSource={RelativeSource Self}}"&gt;
    &lt;StackPanel&gt;
        &lt;TreeView ItemsSource="{Binding Path=Items}"&gt;
            &lt;TreeView.ItemTemplate&gt;
                &lt;HierarchicalDataTemplate ItemsSource="{Binding SubItems}"&gt;
                    &lt;TextBlock Text="{Binding ItemName}"&gt;&lt;/TextBlock&gt;
                   &lt;HierarchicalDataTemplate.ItemTemplate&gt;
                        &lt;DataTemplate&gt;
                            &lt;TextBlock Text="{Binding}"&gt;&lt;/TextBlock&gt;
                        &lt;/DataTemplate&gt;
                    &lt;/HierarchicalDataTemplate.ItemTemplate&gt;
                &lt;/HierarchicalDataTemplate&gt;
            &lt;/TreeView.ItemTemplate&gt;
        &lt;/TreeView&gt;

        &lt;ListBox ItemsSource="{Binding Path=Items}"&gt;
            &lt;ListBox.ItemTemplate&gt;
                &lt;DataTemplate&gt;
                    &lt;StackPanel&gt;
                        &lt;TextBlock Text="{Binding ItemName}"&gt;&lt;/TextBlock&gt;
                        &lt;ListBox ItemsSource="{Binding SubItems}"&gt;
                            &lt;ListBox.ItemTemplate&gt;
                                &lt;DataTemplate&gt;
                                    &lt;TextBlock Text="{Binding}"&gt;&lt;/TextBlock&gt;
                                &lt;/DataTemplate&gt;
                            &lt;/ListBox.ItemTemplate&gt;
                        &lt;/ListBox&gt;
                    &lt;/StackPanel&gt;

                &lt;/DataTemplate&gt;
            &lt;/ListBox.ItemTemplate&gt;
        &lt;/ListBox&gt;
        &lt;Button Click="ButtonBase1_OnClick"&gt;321&lt;/Button&gt;
        &lt;Button Click="ButtonBase2_OnClick"&gt;123&lt;/Button&gt;
    &lt;/StackPanel&gt;
&lt;/Window&gt;
</code></pre>

<p>It is still not clear for me why the behaviour is different - ListBoxes are updated with every little change in both collections (as supposed for ObservableCollection). But <strong>in TreeView only the first level is updated correctly while the sublevel is constantly emty</strong>. If I add INotifyPropertyChanged to SubItems Property the sublevel of TreeView also is updated correctly. Can anybody tell me about that?</p>