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

DayTemplateSelector

7 Answers 206 Views
DatePicker
This is a migrated thread and some comments may be shown as answers.
Shane
Top achievements
Rank 1
Shane asked on 19 Oct 2010, 06:21 AM
I am trying to implement a custom DayTemplateSelector and cannot get it to work. Here is my XAML:

<

 

 

telinput:RadDatePicker x:Name="dateOfWorkDatePicker"

 

 

 

DayTemplate="{x:Null}"

 

 

 

Grid.Row="0"

 

 

 

Grid.Column="1"

 

 

 

Width="120"

 

 

 

HorizontalAlignment="Left"

 

 

 

DateSelectionMode="Day"

 

 

 

DateTimeWatermarkContent="MM/DD/YY"

 

 

 

SelectionChanged="dateOfWorkDatePicker_SelectionChanged"

 

 

 

DisplayDateEnd="{Binding MaxAllowedDate}"

 

 

 

SelectedDate="{Binding SelectedDateOfWork,

 

 

 

Converter={StaticResource DateTimeOffsetToNullableDateTime},

 

 

 

Mode=TwoWay,

 

 

 

ValidatesOnExceptions=true,

 

 

 

NotifyOnValidationError=true

 

 

 

}">

 

 

 

 

<telinput:RadDatePicker.DayTemplateSelector>

 

 

 

 

<local:DaysWithAttendanceHighlighted>

 

 

 

 

<local:DaysWithAttendanceHighlighted.HighlightedTemplate>

 

 

 

 

<DataTemplate>

 

 

 

 

<TextBlock Foreground="Red"

 

 

 

FontWeight="Bold"

 

 

 

Text="{Binding Text}" />

 

 

 

 

</DataTemplate>

 

 

 

 

</local:DaysWithAttendanceHighlighted.HighlightedTemplate>

 

 

 

 

<local:DaysWithAttendanceHighlighted.DefaultTemplate>

 

 

 

 

<DataTemplate>

 

 

 

 

<TextBlock Text="{Binding Text}" />

 

 

 

 

</DataTemplate>

 

 

 

 

</local:DaysWithAttendanceHighlighted.DefaultTemplate>

 

 

 

 

</local:DaysWithAttendanceHighlighted>

 

 

 

 

</telinput:RadDatePicker.DayTemplateSelector>

 

 

 

 

</telinput:RadDatePicker>


Here is my code:

 

public

 

 

class DaysWithAttendanceHighlighted : DataTemplateSelector

 

 

 

 

 

{

 

 

public override DataTemplate SelectTemplate(object item, DependencyObject container)

 

{

 

 

CalendarButtonContent content = item as CalendarButtonContent;

 

 

 

var date_picker = (container as FrameworkElement).ParentOfType<RadDatePicker>();

 

 

 

var vm = date_picker.DataContext as ProjectDetail_AttendanceViewModel;

 

 

 

if (content != null)

 

{

 

 

if (vm.DatesWithAttendance.Contains(content.Date))

 

{

 

 

return HighlightedTemplate;

 

}

}

 

 

return DefaultTemplate;

 

}

 

 

private DataTemplate defaultTemplate;

 

 

 

public DataTemplate DefaultTemplate

 

{

 

 

get

 

 

 

 

 

{

 

 

return defaultTemplate;

 

}

 

 

set

 

 

 

 

 

{

defaultTemplate =

 

value;

 

}

}

 

 

private DataTemplate _highlightedTemplate;

 

 

 

public DataTemplate HighlightedTemplate

 

{

 

 

get

 

 

 

 

 

{

 

 

return _highlightedTemplate;

 

}

 

 

set

 

 

 

 

 

{

_highlightedTemplate =

 

value;

 

}

}

}


What am I doing wrong? Nothing happens, the days in the datepicker are not changed.

7 Answers, 1 is accepted

Sort by
0
Shane
Top achievements
Rank 1
answered on 20 Oct 2010, 05:01 AM
UPDATE: This works fine with a RadCalendar, but NOT with a RadDatePicker. The TemplateSelector never executes with the DatePicker,
but works just fine with the Calendar. Updated code listing follows using the Calendar:

<
telinput:RadCalendar x:Name="dateOfWorkDatePicker"
                                  DayTemplate="{x:Null}"
                                  Grid.Row="0"
                                  Grid.Column="1"
                                  Width="200"
                                  HorizontalAlignment="Left"
                                  DateSelectionMode="Day"   
                                  AreWeekNumbersVisible="False"
                                  AreWeekNamesVisible="False"
                                  SelectionChanged="dateOfWorkDatePicker_SelectionChanged"
                                  DisplayDateEnd="{Binding MaxAllowedDate}"
                                  SelectedDate="{Binding SelectedDateOfWork,
                                                          Converter={StaticResource DateTimeOffsetToNullableDateTime},
                                                          Mode=TwoWay,
                                                          ValidatesOnExceptions=true,
                                                          NotifyOnValidationError=true
                                                          }">
            <telinput:RadCalendar.DayTemplateSelector>
              <local:DaysWithAttendanceHighlighted>
                <local:DaysWithAttendanceHighlighted.HighlightedTemplate>
                  <DataTemplate>
                    <TextBlock Foreground="Red"
                               FontWeight="Bold"
                               Text="{Binding Text}" />
                  </DataTemplate>
                </local:DaysWithAttendanceHighlighted.HighlightedTemplate>
                <local:DaysWithAttendanceHighlighted.DefaultTemplate>
                  <DataTemplate>
                    <TextBlock Text="{Binding Text}" />
                  </DataTemplate>
                </local:DaysWithAttendanceHighlighted.DefaultTemplate>
              </local:DaysWithAttendanceHighlighted>
            </telinput:RadCalendar.DayTemplateSelector>
          </telinput:RadCalendar>

Code Behind:
public class DaysWithAttendanceHighlighted : DataTemplateSelector
    {        
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            CalendarButtonContent content = item as CalendarButtonContent;
            var date_picker = (container as FrameworkElement).ParentOfType<RadCalendar>();
            var vm = date_picker.DataContext as ProjectDetail_AttendanceViewModel;
  
            if (content != null)
            {
                var test = vm.DatesWithAttendance.FirstOrDefault(d => d.Date == content.Date);                
                if (test != Sentinels.EmptyDate)
                {
                    return HighlightedTemplate;
                }
            }
  
            return DefaultTemplate;
        }
  
        private DataTemplate defaultTemplate;
        public DataTemplate DefaultTemplate
        {
            get
            {
                return defaultTemplate;
            }
            set
            {
                defaultTemplate = value;
            }
        }
  
        private DataTemplate _highlightedTemplate;
        public DataTemplate HighlightedTemplate
        {
            get
            {
                return _highlightedTemplate;
            }
            set
            {
                _highlightedTemplate = value;
            }
        }
  
    }
0
Kaloyan
Telerik team
answered on 21 Oct 2010, 07:54 AM
Hi Shane,

 Since the Q2 2010 release most of the calendar related properties are marked as obsolete. You need to set the selectors in the new CalendarStyle property of control. In other words your code should look like this:

<telerik:RadDatePicker x:Name="radDatePicker" HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <telerik:RadDatePicker.CalendarStyle>
                <Style TargetType="telerik:RadCalendar">
                    <Setter Property="DayTemplate" Value="{x:Null}" />
                    <Setter Property="DayTemplateSelector">
                        <!--your implementation here-->
                    </Setter>
                </Style>
            </telerik:RadDatePicker.CalendarStyle>
        </telerik:RadDatePicker>

All the best,
Kaloyan
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Deepak
Top achievements
Rank 1
answered on 03 Dec 2010, 06:56 PM
Hi Kaloyan 
public class CustomTemplateSelector : DataTemplateSelector
    {
        public static ObservableCollection<DateTime> holidaysList = new ObservableCollection<DateTime>();
        PHPMDatesSchedular.SchedulerClient holidaysClient = new PHPMDatesSchedular.SchedulerClient();
 
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            holidaysClient.GetHolidaysAsync();
            holidaysClient.GetHolidaysCompleted += new EventHandler<GetHolidaysCompletedEventArgs>(holidaysClient_GetHolidaysCompleted);
            CalendarButtonContent content = item as CalendarButtonContent;
            if (content != null)
            {
                if (content.Date.DayOfWeek == DayOfWeek.Saturday || content.Date.DayOfWeek == DayOfWeek.Sunday || holidaysList.Contains(content.Date))
                {
                    content.IsEnabled = false;
                }
 
            }
            return DefaultTemplate;
 
        }
 
        void holidaysClient_GetHolidaysCompleted(object sender, GetHolidaysCompletedEventArgs e)
        {
            holidaysList = e.holidays;
 
        }
        public DataTemplate DefaultTemplate
        {
            get;
            set;
        }
 
    }
,


Please find my comments below


<
telerik:RadDatePicker x:Name="radDatePicker" HorizontalAlignment="Center"
                VerticalAlignment="Center">
            <telerik:RadDatePicker.CalendarStyle>
                <Style TargetType="telerik:RadCalendar">
                    <Setter Property="DayTemplate" Value="{x:Null}" />
                    <Setter Property="DayTemplateSelector">
                        <!--your implementation here-->
<!--How can add Weekdays and Holidays here-->
<!--I had overridden DataTemplateSelector with the Class name CustomTemplateSelector--> <!--class file "CustomTemplateSelector" code is mentioned below -->
                    </Setter>
                </Style>
            </telerik:RadDatePicker.CalendarStyle>
        </telerik:RadDatePicker>
0
Kaloyan
Telerik team
answered on 08 Dec 2010, 10:26 AM
Hi Deepak,

Find the attached project as a solution for your case.

Regards,
Kaloyan
the Telerik team
Browse the videos here>> to help you get started with RadControls for Silverlight
0
Deepak
Top achievements
Rank 1
answered on 09 Dec 2010, 06:37 AM
Dear Kaloyan,

Thank Q very much. The code what you had sent helped me a lot.


Regards,
Deepak Koduri
0
Anup
Top achievements
Rank 2
answered on 10 May 2013, 11:44 AM
Hello Sir,

Will you please guide me for the Calendar control....please

i am having a big trouble here...

please refer ...
http://www.telerik.com/community/forums/silverlight/calendar/daytemplateselector-calendar-not-working.aspx

i need this urgent help...

Regards,
Anup Shah

0
Vladi
Telerik team
answered on 14 May 2013, 06:24 AM
Hello,

We responded to you in this forum post could we continue the discussion there?

Regards,
Vladi
the Telerik team

Explore the entire Telerik portfolio by downloading Telerik DevCraft Ultimate.

Tags
DatePicker
Asked by
Shane
Top achievements
Rank 1
Answers by
Shane
Top achievements
Rank 1
Kaloyan
Telerik team
Deepak
Top achievements
Rank 1
Anup
Top achievements
Rank 2
Vladi
Telerik team
Share this question
or