using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows.Input;
using Telerik.Windows.Controls;

namespace WpfApp99
{
    public class MainWindowViewModel :ViewModelBase
    {
        private ObservableCollection<MainModel> main;
        public ObservableCollection<MainModel> Main
        {
            get
            {
                if(main == null)
                {
                    var dataB1 = new List<SubB>
                    {
                        new SubB { Name = "1" },
                        new SubB { Name = "2" },
                        new SubB { Name = "3" },
                    };
                    var dataB2 = new List<SubB>
                    {
                        new SubB { Name = "11" },
                        new SubB { Name = "22" },
                        new SubB { Name = "33" },
                    };

                    var dataA =  new List<SubA>
                    {
                        new SubA { Name = "A", SubB = new ObservableCollection<SubB>(dataB1) },
                        new SubA { Name = "BB", SubB = new ObservableCollection<SubB>(dataB2) },
                        new SubA { Name = "CCC", SubB = new ObservableCollection<SubB>(dataB1) },
                        new SubA { Name = "DDDD", SubB = new ObservableCollection<SubB>(dataB2) },
                        new SubA { Name = "EEEEE", SubB = new ObservableCollection<SubB>(dataB1) },
                    };

                    var data = new MainModel { Name = "All", SubA = new ObservableCollection<SubA>(dataA) };
                    main = new ObservableCollection<MainModel> { data };
                }
                return main;
            }
        }

        public MainWindowViewModel() { }

    }

    public class MainModel
    {
        public string Name { get; set; }
        public ObservableCollection<SubA> SubA { get; set; }
    }

    public class SubA
    {
        public string Name { get; set; }
        public ObservableCollection<SubB> SubB { get; set; }
    }

    public class SubB
    {
        public string Name { get; set; }
    }
}
