I want to customize GroupDescription to meet our needs. Here is the `EquipmentGroupDescription` class: public class EquipmentGroupDescription : GroupDescription { public override object GroupNameFromItem(object item, int level, CultureInfo culture) { var experiment = item as Experiment; if (experiment == null) return null; return experiment.EquipmentID; } } The `Experiment` class inherits from `Appointment`: public class Experiment : Appointment { public string ID { get; set; } public string Name { get; set; } public string EquipmentName { get; set; } public Guid EquipmentID { get; set; } } I need to group `Experiment` by `EquipmentID` and `DateTime`. Here is the XAML: <telerik:RadScheduleView x:Name="scheduler" ActiveViewDefinitionIndex="1" FirstVisibleTime="12:00" GroupDescriptionsSource="{Binding CustomGroupDescriptions}" AppointmentsSource="{Binding Experiments}"> <telerik:RadScheduleView.GroupHeaderContentTemplate> <DataTemplate> <TextBlock Text="{Binding}" Foreground="White" FontWeight="Bold"/> </DataTemplate> </telerik:RadScheduleView.GroupHeaderContentTemplate> <telerik:RadScheduleView.AppointmentItemContentTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Appointment.Name}" FontWeight="Bold" Foreground="White"/> <TextBlock Text="{Binding Appointment.EquipmentName}" Foreground="#DDD"/> </StackPanel> </DataTemplate> </telerik:RadScheduleView.AppointmentItemContentTemplate> <telerik:RadScheduleView.ViewDefinitions> <telerik:DayViewDefinition /> <telerik:WeekViewDefinition /> <telerik:MonthViewDefinition /> <telerik:TimelineViewDefinition DayStartTime="08:00" /> </telerik:RadScheduleView.ViewDefinitions> </telerik:RadScheduleView> ``` In the ViewModel,
private readonly Guid pivot1 = Guid.NewGuid();
private readonly Guid pivot2 = Guid.NewGuid();
var items = LoadAppointmentsSource();
Experiments = items.ToObservableCollection();
CustomGroupDescriptions = new ObservableCollection<EquipmentGroupDescription>
{
new EquipmentGroupDescription()
};
private IEnumerable<Experiment> LoadAppointmentsSource()
{
var items = new List<Experiment>
{
new Experiment()
{
Subject="1",
Name="K Experiment 1",
EquipmentID=pivot1,
EquipmentName="Pivot",
Start=DateTime.Today.AddDays(1).AddHours(12),
End=DateTime.Today.AddDays(1).AddHours(13)
},
new Experiment()
{
Subject="2",
Name="K Experiment 2",
EquipmentID=pivot2,
EquipmentName="Pivot",
Start=DateTime.Today.AddDays(1).AddHours(12),
End=DateTime.Today.AddDays(1).AddHours(13)
},
};
var firstDate = items.Min(new Func<Experiment, DateTime>(p => p.Start.Date));
var firstDay = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
var dayOfWeekNumber = (int)DateTime.Today.DayOfWeek == 0 ? 7 : (int)DateTime.Today.DayOfWeek;
var firstDayOfCurrentWeek = DateTime.Today.Subtract(TimeSpan.FromDays(dayOfWeekNumber - (int)firstDay));
var offset = firstDayOfCurrentWeek - firstDate;
foreach (var item in items)
{
item.Start += offset;
item.End += offset;
}
return items;
}
private ObservableCollection<Experiment> experiments;
public ObservableCollection<Experiment> Experiments
{
get { return experiments; }
set
{
experiments = value;
OnPropertyChanged();
}
}
private ObservableCollection<EquipmentGroupDescription> customGroupDescriptions;
public ObservableCollection<EquipmentGroupDescription> CustomGroupDescriptions
{
get { return customGroupDescriptions; }
set
{
customGroupDescriptions = value;
OnPropertyChanged();
}
}
the Telerik version used is 2022.3.912.310. During debugging, I found that `GroupDescriptionsSource`
contains two objects: `EquipmentGroupDescription` and `DatetimeGroupDescription`.
However, `EquipmentGroupDescription` has 0 items in `GroupNames`, and its `GroupNameFromItem`
method is never called.