This is a migrated thread and some comments may be shown as answers.

HierarchyChildTemplate. No data is displayed

1 Answer 199 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Гоша
Top achievements
Rank 1
Гоша asked on 16 Aug 2017, 10:02 AM

Hello!

There are the following types of data:

namespace TelerikHierarchyChildTemplate.Model
{
    public class WatchList
    {
        public int WatchListId { get; set; }
        public string Moniker { get; set; }
        public ICollection<ContentWatchList> Content { get; set; }
    }
 
    public class ContentWatchList
    {
        public int ContentWatchListId { get; set; }
        public WatchList ParentWatchList { get; set; }
        public Item ItemItem { get; set; }
    }
 
    public class Item
    {
        public int ItemId { get; set; }
        public string Moniker { get; set; }
        public string Note { get; set; }
        public ICollection<ContentWatchList> ContentsWatchLists { get; set; }
    }
}

 

There is a model (MainViewModel) that in the creation fills the collection. To be filled in correctly :)

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Telerik.Windows.Controls;
using TelerikHierarchyChildTemplate.Model;
 
namespace TelerikHierarchyChildTemplate
{
    public class MainViewModel : ViewModelBase
    {
        private ObservableCollection<WatchList> _watchListsCollection;
        private ObservableCollection<ContentWatchList> _contentWatchListCollection;
        private ObservableCollection<Item> _itemsCollection;
 
        public ObservableCollection<WatchList> WatchListsCollection
        {
            get { return _watchListsCollection; }
            set
            {
                _watchListsCollection = value;
                OnPropertyChanged(()=> WatchListsCollection);
            }
        }
 
        public ObservableCollection<ContentWatchList> ContentWatchListCollection
        {
            get { return _contentWatchListCollection; }
            set
            {
                _contentWatchListCollection = value;
                OnPropertyChanged(()=>ContentWatchListCollection);
            }
        }
 
        public ObservableCollection<Item> ItemsCollection
        {
            get { return _itemsCollection; }
            set
            {
                _itemsCollection = value;
                OnPropertyChanged(()=> ItemsCollection);
            }
        }
 
        public MainViewModel()
        {
            WatchListsCollection = new ObservableCollection<WatchList>
            {
                new WatchList()
                {
                    WatchListId = 0,
                    Moniker = "List One",
                    Content = new List<ContentWatchList>()
                },
 
                new WatchList()
                {
                    WatchListId = 1,
                    Moniker = "List Two",
                    Content = new List<ContentWatchList>()
                },
 
                new WatchList()
                {
                    WatchListId = 2,
                    Moniker = "List Three",
                    Content = new List<ContentWatchList>()
                }
            };
 
            ItemsCollection = new ObservableCollection<Item>
            {
                new Item()
                {
                    ItemId = 0,
                    Moniker = "Item One",
                    Note = "Note One",
                    ContentsWatchLists = new List<ContentWatchList>()
                },
 
                new Item()
                {
                    ItemId = 1,
                    Moniker = "Item Two",
                    Note = "Note Two",
                    ContentsWatchLists = new List<ContentWatchList>()
                },
 
                new Item()
                {
                    ItemId = 2,
                    Moniker = "Item Three",
                    Note = "Note Tree",
                    ContentsWatchLists = new List<ContentWatchList>()
                },
                new Item()
                {
                    ItemId = 3,
                    Moniker = "Item Four",
                    Note = "Note Four",
                    ContentsWatchLists = new List<ContentWatchList>()
                }
            };
 
            ContentWatchListCollection = new ObservableCollection<ContentWatchList>
            {
                new ContentWatchList()
                {
                    ContentWatchListId = 0,
                    ParentWatchList = WatchListsCollection.First(p=>p.WatchListId==0),
                    ItemItem = ItemsCollection.First(p=>p.ItemId==0)
                },
 
                new ContentWatchList()
                {
                    ContentWatchListId = 1,
                    ParentWatchList = WatchListsCollection.First(p=>p.WatchListId==0),
                    ItemItem = ItemsCollection.First(p=>p.ItemId==1)
                },
 
                new ContentWatchList()
                {
                    ContentWatchListId = 2,
                    ParentWatchList = WatchListsCollection.First(p=>p.WatchListId==0),
                    ItemItem = ItemsCollection.First(p=>p.ItemId==2)
                },
 
                new ContentWatchList()
                {
                    ContentWatchListId = 3,
                    ParentWatchList = WatchListsCollection.First(p=>p.WatchListId==1),
                    ItemItem = ItemsCollection.First(p=>p.ItemId==3)
                },
 
                new ContentWatchList()
                {
                    ContentWatchListId = 4,
                    ParentWatchList = WatchListsCollection.First(p=>p.WatchListId==1),
                    ItemItem = ItemsCollection.First(p=>p.ItemId==2)
                },
 
                new ContentWatchList()
                {
                    ContentWatchListId = 5,
                    ParentWatchList = WatchListsCollection.First(p=>p.WatchListId==1),
                    ItemItem = ItemsCollection.First(p=>p.ItemId==1)
                }
            };
 
            foreach (var item in ItemsCollection)
            {
                foreach (var content in ContentWatchListCollection)
                {
                    if (item.ItemId == content.ItemItem.ItemId) item.ContentsWatchLists.Add(content);
                }
            }
 
            foreach (var wachlist in WatchListsCollection)
            {
                foreach (var content in ContentWatchListCollection)
                {
                    if (wachlist.WatchListId == content.ParentWatchList.WatchListId) wachlist.Content.Add(content);
                }
            }
 
             
        }
    }
}

 

There is a view: 

<Window x:Class="TelerikHierarchyChildTemplate.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
                Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <telerik:RadGridView Grid.Column="0" ItemsSource="{Binding WatchListsCollection}"></telerik:RadGridView>
            <telerik:RadGridView Grid.Column="1" ItemsSource="{Binding ContentWatchListCollection}"></telerik:RadGridView>
            <telerik:RadGridView Grid.Column="2" ItemsSource="{Binding ItemsCollection}"></telerik:RadGridView>
        </Grid>
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <telerik:RadGridView ItemsSource="{Binding WatchListsCollection}">
                                <telerik:RadGridView.ChildTableDefinitions>
                                    <telerik:GridViewTableDefinition>
                                        <telerik:GridViewTableDefinition.Relation>
                                            <telerik:PropertyRelation ParentPropertyName="Content" />
                                        </telerik:GridViewTableDefinition.Relation>
                                    </telerik:GridViewTableDefinition>
                                </telerik:RadGridView.ChildTableDefinitions>
            </telerik:RadGridView>
            <telerik:RadGridView Grid.Column="1" ItemsSource="{Binding WatchListsCollection}">
                <telerik:RadGridView.ChildTableDefinitions>
                    <telerik:GridViewTableDefinition/>
                </telerik:RadGridView.ChildTableDefinitions>
 
                <telerik:RadGridView.HierarchyChildTemplate>
                    <DataTemplate>
                        <telerik:RadGridView x:Name="RadGridView1" GroupRenderMode="Flat"
                                             DataContext="{Binding}"
                                             BorderThickness="0,1,0,1"
                                             GridLinesVisibility="None"
                                             CanUserFreezeColumns="False"
                                             AutoGenerateColumns="False"
                                             ItemsSource="{Binding ContentWatchListCollection}"
                                             ShowGroupPanel="False"
                                             IsReadOnly="True">
                            <telerik:RadGridView.Columns>
                                <telerik:GridViewDataColumn DataMemberBinding="{Binding ItemItem.Moniker}"
                                                            Header="Moniker" />
                                <telerik:GridViewDataColumn DataMemberBinding="{Binding ItemItem.Note}"
                                                            Header="Note" />
 
                            </telerik:RadGridView.Columns>
                        </telerik:RadGridView>
                    </DataTemplate>
                </telerik:RadGridView.HierarchyChildTemplate>
 
            </telerik:RadGridView>
        </Grid>
 
    </Grid>
</Window>

 

Results of work on the attached image.

A hierarchical structure is displayed when using GridViewTableDefinition.Relation, and when using HierarchyChildTemplate, there is no.

I ask you to inform me that it is necessary to correct that the nested data began to be displayed at usage HierarchyChildTemplate

 

1 Answer, 1 is accepted

Sort by
0
Accepted
Dinko | Tech Support Engineer
Telerik team
answered on 21 Aug 2017, 09:23 AM
Hi Гоша,

The hierarchy data in the last grid (with HierarchyChildTemplate) is not visualized because you are binding the ItemsSource property to a property which does not exist in the WatchListsCollection. Basically, the data context of the RadGridView in the HierarchyChildTemplate is the WatchListsCollection. That is why the data is not visualized when you expand a row in the nested grid. You can bind the ItemsSource property to the Content collection.
<telerik:RadGridView Grid.Column="1" ItemsSource="{Binding WatchListsCollection}">
    <telerik:RadGridView.ChildTableDefinitions>
        <telerik:GridViewTableDefinition/>
    </telerik:RadGridView.ChildTableDefinitions>
    <telerik:RadGridView.HierarchyChildTemplate>
        <DataTemplate>
            <telerik:RadGridView x:Name="RadGridView1" GroupRenderMode="Flat"
                                 DataContext="{Binding }"
                                 BorderThickness="0,1,0,1"
                                 GridLinesVisibility="None"
                                 CanUserFreezeColumns="False"
                                 AutoGenerateColumns="False"
                                 ItemsSource="{Binding Content}"
                                 ShowGroupPanel="False"
                                 IsReadOnly="True">
                <telerik:RadGridView.Columns>
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding ItemItem.Moniker}"
                                                Header="Moniker" />
                    <telerik:GridViewDataColumn DataMemberBinding="{Binding ItemItem.Note}"
                                                Header="Note" />
 
                </telerik:RadGridView.Columns>
            </telerik:RadGridView>
        </DataTemplate>
    </telerik:RadGridView.HierarchyChildTemplate>
</telerik:RadGridView>

Regards,
Dinko
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which you to write beautiful native mobile apps using a single shared C# codebase.
Tags
GridView
Asked by
Гоша
Top achievements
Rank 1
Answers by
Dinko | Tech Support Engineer
Telerik team
Share this question
or