or
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); } } } }
<telerik:TreeColumnDefinition MemberBinding="{Binding WBS}" Header="WBS" ColumnWidth="60"> <telerik:TreeColumnDefinition.CellTemplate> <DataTemplate> <TextBlock Text="{Binding WBS}" /> </DataTemplate> </telerik:TreeColumnDefinition.CellTemplate></telerik:TreeColumnDefinition>args.DragVisual = new ContentControl { Content = MyImage, Width = 25, Height = 25 };This image always shows up at a certain position relative to the cursor. Can I influence this position? I tried DragVisualOffset but - maybe I used it incorrect - that didn't result in a change of position. Thanks in advance, Vincent
<Grid> <telerik:RadGridView x:Name="Tools" Marin="0" LoadingRowDetails="ToolsLoadingRowDetails" ItemsSource="{Binding Tools}" IsReadOnly="True" RowHeight="45" RowIndicatorVisibility="Collapsed" AutoGenerateColumns="False" CanUserFreezeColumns="False" CanUserResizeColumns="True" ShowGroupPanel="False"> <telerik:RadGridView.Columns> <telerik:GridViewToggleRowDetailsColumn /> <telerik:GridViewDataColumn Header="Product Id" DataMemberBinding="{Binding Path=TypeOfTool}" Width="*"/> <telerik:GridViewDataColumn Header="Target market" DataMemberBinding="{Binding Path=TargetMarket}" Width="3*"/> </telerik:RadGridView.Columns> <telerik:RadGridView:RowDetailsTemplate> <DataTemplate> <telerik:RadGridView Marin="0" LoadingRowDetails="MoreInfoLoadingRowDetails" ItemsSource="{Binding Path=DataContext.MoreInfo, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}" IsReadOnly="True" RowHeight="45" RowIndicatorVisibility="Collapsed" AutoGenerateColumns="False" CanUserFreezeColumns="False" CanUserResizeColumns="True" ShowGroupPanel="False"> <telerik:RadGridView.Columns> <telerik:GridViewToggleRowDetailsColumn /> <telerik:GridViewDataColumn Header="More Info" DataMemberBinding="{Binding Path=MoreInfo}" Width="*"/> </telerik:RadGridView.Columns> <DataTemplate> <telerik:RadGridView Marin="0" LoadingRowDetails="DetailedInfoLoadingRowDetails" ItemsSource="{Binding Path=DataContext.DetailedInfo, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}, AncestorLevel=2}}" IsReadOnly="True" RowHeight="45" RowIndicatorVisibility="Collapsed" AutoGenerateColumns="False" CanUserFreezeColumns="False" CanUserResizeColumns="True" ShowGroupPanel="False"> <telerik:RadGridView.Columns> <telerik:GridViewToggleRowDetailsColumn /> <telerik:GridViewDataColumn Header="Detailed Info" DataMemberBinding="{Binding Path=DetailedInfo}" Width="*"/> </telerik:RadGridView.Columns> <DataTemplate> <telerik:RadGridView Marin="0" LoadingRowDetails="TargetInfoLoadingRowDetails" ItemsSource="{Binding Path=DataContext.TargetInfo, RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}, AncestorLevel=3}}" IsReadOnly="True" RowHeight="45" RowIndicatorVisibility="Collapsed" AutoGenerateColumns="False" CanUserFreezeColumns="False" CanUserResizeColumns="True" ShowGroupPanel="False"> <telerik:RadGridView.Columns> <telerik:GridViewToggleRowDetailsColumn /> <telerik:GridViewDataColumn Header="Target Info" DataMemberBinding="{Binding Path=TargetInfo}" Width="*"/> </telerik:RadGridView.Columns> </telerik:RadGridView> </telerik:RadGridView.RowDetailsTemplate> </telerik:RadGridView> </DataTemplate> </telerik:RadGridView.RowDetailsTemplate> </telerik:RadGridView> </DataTemplate> </telerik:RadGridView.RowDetailsTemplate></telerik:RadGridView>
Again, I just wrote this by hand so it probably contains open/close tagging errors, but the overall idea should be understood.
The problematic event to bind to is the deepest one, in the example it is the "TargetInfo" GridView.
The XAML works as long as I don't bind to the LoadingRowDetails event. The moment I add the binding, the code throws the NullReferenceException
open attempt to expand the first row.
I hope I've provided enough information regarding the problem.
Thanks