I tried to work with Demo Example: Grupping - Advanced, but it doesn´t work to me.I did small changes in code, but nothing difficult. The only thing which is working is Enable/disable groupping. When I uncheck a layer, layer is still visible in ScheduleView. Am I doing something wrong in my code?
MainWindow.xaml
<
Window
x:Class
=
"TestScheduleView.MainWindow"
Title
=
"MainWindow"
Height
=
"500"
Width
=
"800"
xmlns:telerikScheduler
=
"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.ScheduleView"
xmlns:telerikQuickStart
=
"clr-namespace:Telerik.Windows.Controls.QuickStart;assembly=Telerik.Windows.Controls"
>
<
Window.Resources
>
<
SolidColorBrush
x:Key
=
"MainBackground"
Color
=
"#FF000000"
/>
<
LinearGradientBrush
x:Key
=
"SubHeadingBackground"
EndPoint
=
"0.5,1"
MappingMode
=
"RelativeToBoundingBox"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FF4B4B4B"
Offset
=
"1"
/>
<
GradientStop
Color
=
"#FF6E6E6E"
/>
</
LinearGradientBrush
>
<
LinearGradientBrush
x:Key
=
"SelectionOptionBackground"
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FF1E1E1E"
Offset
=
"0"
/>
<
GradientStop
Color
=
"#FF040404"
Offset
=
"1"
/>
</
LinearGradientBrush
>
<
SolidColorBrush
x:Key
=
"SelectionOptionBorderBrush"
Color
=
"#FF313132"
/>
<
Style
x:Key
=
"SelectionOptionStyle"
TargetType
=
"Border"
>
<
Setter
Property
=
"Background"
Value
=
"{StaticResource SelectionOptionBackground}"
/>
<
Setter
Property
=
"BorderBrush"
Value
=
"{StaticResource SelectionOptionBorderBrush}"
/>
<
Setter
Property
=
"BorderThickness"
Value
=
"1 0 1 1"
/>
<
Setter
Property
=
"MinHeight"
Value
=
"70"
/>
</
Style
>
</
Window.Resources
>
<
Grid
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"32"
/>
<
RowDefinition
Height
=
"*"
/>
</
Grid.RowDefinitions
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
"225"
/>
<
ColumnDefinition
/>
</
Grid.ColumnDefinitions
>
<
Border
Grid.RowSpan
=
"2"
Grid.ColumnSpan
=
"2"
telerikQuickStart:ThemeAwareBackgroundBehavior.IsEnabled
=
"True"
/>
<
Border
Background
=
"#FF212121"
Grid.RowSpan
=
"2"
/>
<
Border
Background
=
"{StaticResource MainBackground}"
Grid.ColumnSpan
=
"2"
>
<
TextBlock
Text
=
"Grouping and Filtering"
FontFamily
=
"Segoe UI"
HorizontalAlignment
=
"Left"
Foreground
=
"#FFE5E2E2"
Margin
=
"13 0 0 0"
FontSize
=
"16"
TextWrapping
=
"Wrap"
VerticalAlignment
=
"Center"
/>
</
Border
>
<
StackPanel
Grid.Row
=
"1"
Orientation
=
"Vertical"
>
<
Border
Background
=
"{StaticResource SubHeadingBackground}"
Height
=
"32"
>
<
TextBlock
Text
=
"Select a Layer"
TextWrapping
=
"Wrap"
FontSize
=
"13"
Foreground
=
"#FFEBE9E9"
FontFamily
=
"Segoe UI"
VerticalAlignment
=
"Center"
Margin
=
"13 0 0 0"
/>
</
Border
>
<
Border
Background
=
"{StaticResource MainBackground}"
Height
=
"32"
>
<
CheckBox
IsChecked
=
"{Binding EnableGrouping}"
Content
=
"Enable Grouping"
Foreground
=
"#FFA9A9A9"
FontWeight
=
"Normal"
Margin
=
"13 0 0 0"
VerticalAlignment
=
"Center"
/>
</
Border
>
<
Border
Style
=
"{StaticResource SelectionOptionStyle}"
Height
=
"32"
>
<
StackPanel
Orientation
=
"Horizontal"
Margin
=
"5"
>
<
CheckBox
IsChecked
=
"{Binding ShowPresentationLayer}"
Content
=
"Fixed"
IsEnabled
=
"{Binding EnableGrouping}"
Foreground
=
"#FFA9A9A9"
VerticalAlignment
=
"Center"
Margin
=
"10"
Padding
=
"10 0 0 0"
/>
</
StackPanel
>
</
Border
>
<
Border
Style
=
"{StaticResource SelectionOptionStyle}"
>
<
StackPanel
Orientation
=
"Horizontal"
Margin
=
"5"
>
<
CheckBox
IsChecked
=
"{Binding ShowDataLayer}"
Content
=
"PeriodicFixed"
IsEnabled
=
"{Binding EnableGrouping}"
Foreground
=
"#FFA9A9A9"
VerticalAlignment
=
"Center"
Margin
=
"10"
Padding
=
"10 0 0 0"
/>
</
StackPanel
>
</
Border
>
<
Border
Style
=
"{StaticResource SelectionOptionStyle}"
>
<
StackPanel
Orientation
=
"Horizontal"
Margin
=
"5"
>
<
CheckBox
IsChecked
=
"{Binding ShowBusinessLayer}"
Content
=
"Periodical"
IsEnabled
=
"{Binding EnableGrouping}"
Foreground
=
"#FFA9A9A9"
VerticalAlignment
=
"Center"
Margin
=
"10"
Padding
=
"10 0 0 0"
/>
</
StackPanel
>
</
Border
>
</
StackPanel
>
<
telerikScheduler:RadScheduleView
Grid.Column
=
"1"
Grid.Row
=
"1"
SnapAppointments
=
"True"
x:Name
=
"radScheduler"
AppointmentsSource
=
"{Binding Appointments}"
GroupDescriptionsSource
=
"{Binding GroupDescriptions}"
ActiveViewDefinitionIndex
=
"1"
>
<
telerikScheduler:RadScheduleView.ViewDefinitions
>
<
telerikScheduler:DayViewDefinition
GroupFilter
=
"{Binding GroupFilter}"
Orientation
=
"Horizontal"
DayStartTime
=
"12:00:00"
/>
<
telerikScheduler:WeekViewDefinition
GroupFilter
=
"{Binding GroupFilter}"
Orientation
=
"Horizontal"
DayStartTime
=
"12:00:00"
/>
<
telerikScheduler:MonthViewDefinition
GroupFilter
=
"{Binding GroupFilter}"
/>
<
telerikScheduler:TimelineViewDefinition
GroupFilter
=
"{Binding GroupFilter}"
/>
</
telerikScheduler:RadScheduleView.ViewDefinitions
>
<
telerikScheduler:RadScheduleView.ResourceTypesSource
>
<
telerikScheduler:ResourceTypeCollection
>
<
telerikScheduler:ResourceType
Name
=
"Category"
>
<
telerikScheduler:Resource
ResourceName
=
"Fixed"
/>
<
telerikScheduler:Resource
ResourceName
=
"PeriodicFixed"
/>
<
telerikScheduler:Resource
ResourceName
=
"Periodical"
/>
</
telerikScheduler:ResourceType
>
</
telerikScheduler:ResourceTypeCollection
>
</
telerikScheduler:RadScheduleView.ResourceTypesSource
>
</
telerikScheduler:RadScheduleView
>
</
Grid
>
</
Window
>
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace TestScheduleView
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
}
}
ViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Telerik.Windows.Controls.ScheduleView;
using Telerik.Windows.Controls;
using System.ComponentModel;
namespace TestScheduleView
{
class ViewModel : ViewModelBase
{
private bool showBusinessLayer = true;
private bool showDataLayer = true;
private bool showPresentationLayer = true;
private bool enableGrouping = true;
private GroupDescriptionCollection groupDescriptions;
private Func<
object
, bool> groupFilter;
public bool ShowBusinessLayer
{
get
{
return this.showBusinessLayer;
}
set
{
if (this.showBusinessLayer != value)
{
this.showBusinessLayer = value;
this.OnPropertyChanged(() => this.ShowBusinessLayer);
this.UpdateGroupFilter();
}
}
}
public bool ShowDataLayer
{
get
{
return this.showDataLayer;
}
set
{
if (this.showDataLayer != value)
{
this.showDataLayer = value;
this.OnPropertyChanged(() => this.ShowDataLayer);
this.UpdateGroupFilter();
}
}
}
public bool ShowPresentationLayer
{
get
{
return this.showPresentationLayer;
}
set
{
if (this.showPresentationLayer != value)
{
this.showPresentationLayer = value;
this.OnPropertyChanged(() => this.ShowPresentationLayer);
this.UpdateGroupFilter();
}
}
}
public bool EnableGrouping
{
get
{
return this.enableGrouping;
}
set
{
if (this.enableGrouping != value)
{
this.enableGrouping = value;
this.OnPropertyChanged(() => this.EnableGrouping);
this.UpdateGroupDescriptions();
}
}
}
public GroupDescriptionCollection GroupDescriptions
{
get
{
if (this.groupDescriptions == null)
{
this.groupDescriptions = new GroupDescriptionCollection() { new DateGroupDescription() };
this.UpdateGroupDescriptions();
}
return this.groupDescriptions;
}
}
public Func<
object
, bool> GroupFilter
{
get
{
return this.groupFilter;
}
private set
{
this.groupFilter = value;
this.OnPropertyChanged(() => this.GroupFilter);
}
}
private void UpdateGroupFilter()
{
this.GroupFilter = new Func<
object
, bool>(this.GroupFilterFunc);
}
private bool GroupFilterFunc(object groupName)
{
IResource resource = groupName as IResource;
if (resource == null)
return true;
IEnumerable<
string
> enumerable = GetEnabledGroups();
foreach (string str in enumerable)
{
if (str.ToLower().Equals(resource.ResourceName.ToLower()))
return true;
}
return false;
}
private ObservableAppointmentCollection appointments;
public ObservableAppointmentCollection Appointments
{
get
{
return this.appointments;
}
set
{
this.appointments = value;
}
}
public ViewModel()
{
appointments = new ObservableAppointmentCollection();
Appointment appointment = new Appointment();
appointment.Start = DateTime.Now;
appointment.End = DateTime.Now.AddHours(1);
appointment.Subject = "New appointment";
Resource r = new Resource();
r.ResourceName = "Periodical";
r.ResourceType = "Category";
appointment.Resources.Add(r);
Appointments.Add(appointment);
}
private IEnumerable<
string
> GetEnabledGroups()
{
List<
string
> enabledGroups = new List<
string
>();
if (this.ShowPresentationLayer) enabledGroups.Add("Fixed");
if (this.ShowDataLayer) enabledGroups.Add("PeriodicFixed");
if (this.ShowBusinessLayer) enabledGroups.Add("Periodical");
return enabledGroups;
}
private void UpdateGroupDescriptions()
{
if (this.EnableGrouping)
{
ResourceGroupDescription groupDescription = new ResourceGroupDescription();
groupDescription.ResourceType = "Category";
this.GroupDescriptions.Add(groupDescription);
}
else
{
this.GroupDescriptions.RemoveAll((GroupDescription g) => g is ResourceGroupDescription);
}
}
}
}