private void SetItemsSource(IEnumerable value)
        {
            var itemsSource = new ObservableCollection <object>();

            FlatItemsSource = new FlatCollection(new ItemsSourceHierarchicalSource(value, this), itemsSource);
            // now setting the flat source that the ItemsControl will use
            SetItemsSource(itemsSource);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="VirtualTreeView"/> class.
 /// </summary>
 public VirtualTreeView()
 {
     FlatItems = new FlatCollection(new ItemHierarchicalSource(HierarchicalItems), Items);
     HierarchicalItems.IfType <INotifyCollectionChanged>(nc => nc.CollectionChanged += OnHierarchicalItemsCollectionChanged);
     SelectedItems.CollectionChanged += OnSelectedItemsCollectionChanged;
 }