Hi guys,
Maybe I am just doing something wrong, but I have lost a lot of time on this already and have no idea what is going on.
I basically have a RadScheduleView Control inside of a Grid on a UserControl. This control is then placed inside of a Grid on a Window. Pretty simple and working perfectly.
My UserControl:
My Window:
On the code side of the story I am using a simplified MVVM pattern with a ViewModel supporting my control:
On the ViewModel behind the window I basically set the visibility of the control to visible when a user clicks on a button. All this works fine.
Also at the moment I am not even trying to add any Appointments. I commented that bit of the code out to eliminate sources of problems. All I want is the control to display properly with the default view and no appointments.
When the control is rendered in run time all the header/menu structure renders fine, but the content area is blank. See attached photo for image of this.
At design time it appears to be fine since it displays the usual "Please set an Appointments Source" message.
Any idea what might be causing this?
Using:
Visual Studio 2010
Targeting .NET Framework 4.0
Windows 7
Telerik.Windows.Controls.ScheduleView vs. 2012.1.326.40
Thanks for your help in advance.
Maybe I am just doing something wrong, but I have lost a lot of time on this already and have no idea what is going on.
I basically have a RadScheduleView Control inside of a Grid on a UserControl. This control is then placed inside of a Grid on a Window. Pretty simple and working perfectly.
My UserControl:
<
UserControl
x:Class
=
"MonitoringRounds"
xmlns:local
=
"clr-namespace:EScIS.Win.Controls.MonitoringRounds"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
mc:Ignorable
=
"d"
d:DesignHeight
=
"600"
d:DesignWidth
=
"1000"
>
<
UserControl.DataContext
>
<
local:MonitoringRoundsViewModel
/>
</
UserControl.DataContext
>
<
Grid
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"0.05*"
/>
<
RowDefinition
/>
</
Grid.RowDefinitions
>
<
TextBlock
Grid.Row
=
"0"
>Monitoring Rounds</
TextBlock
>
<
telerik:RadScheduleView
Grid.Row
=
"1"
Name
=
"radsvMonitoringRounds"
Padding
=
"5"
MaxHeight
=
"400"
MaxWidth
=
"600"
AppointmentsSource
=
"{Binding Appointments}"
ResourceTypesSource
=
"{Binding ResourcesTypes}"
>
<
telerik:RadScheduleView.ViewDefinitions
>
<
telerik:MonthViewDefinition
/>
<
telerik:TimelineViewDefinition
/>
</
telerik:RadScheduleView.ViewDefinitions
>
</
telerik:RadScheduleView
>
</
Grid
>
</
UserControl
>
My Window:
<
Window
x:Class
=
"LSpecs"
xmlns:menu
=
"clr-namespace:EScIS.Win.LSpecs.UI.Controls.Menu;assembly=EScIS.Win.LSpecs.UI.Controls.Menu"
xmlns:ma
=
"clr-namespace:EScIS.Win.Controls.MonitoringAssignees;assembly=EScIS.Win.Controls.MonitoringAssignees"
xmlns:mp
=
"clr-namespace:EScIS.Win.Controls.MonitoringPrograms;assembly=EScIS.Win.Controls.MonitoringPrograms"
xmlns:mr
=
"clr-namespace:EScIS.Win.Controls.MonitoringRounds;assembly=EScIS.Win.Controls.MonitoringRounds"
Title
=
"Desktop"
Height
=
"1200"
Width
=
"1900"
WindowState
=
"Maximized"
>
<
Grid
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"40"
/>
<
RowDefinition
/>
<
RowDefinition
Height
=
"20"
/>
</
Grid.RowDefinitions
>
<
Border
Grid.Row
=
"0"
Name
=
"borderMainToolBar"
BorderThickness
=
"0,0,0,2"
BorderBrush
=
"Gray"
>
<
menu:MainToolbar
Name
=
"ctrlMainToolBar"
menu:MainToolbar.Button_Click_WorkflowMenu
=
"ctrlDesktop_Button_Click_WorkflowMenu"
/>
</
Border
>
<
menu:Desktop
Grid.Row
=
"1"
Name
=
"ctrlDesktop"
menu:WorkflowFieldPreparation.Button_Click_MonitoringAssignees
=
"Desktop_Button_Click_MonitoringAssignees"
menu:WorkflowFieldPreparation.Button_Click_MonitoringPrograms
=
"ctrlDesktop_Button_Click_MonitoringPrograms"
menu:WorkflowFieldPreparation.Button_Click_MonitoringRounds
=
"ctrlDesktop_Button_Click_MonitoringRounds"
/>
<
ma:MonitoringAssignees
Grid.Row
=
"1"
Name
=
"ctrlMonitoringAssignees"
Visibility
=
"Hidden"
/>
<
mp:MonitoringPrograms
Grid.Row
=
"1"
Name
=
"ctrlMonitoringPrograms"
Visibility
=
"Hidden"
/>
<
mr:MonitoringRounds
Grid.Row
=
"1"
Name
=
"ctrlMonitoringRounds"
Visibility
=
"Hidden"
/>
</
Grid
>
</
Window
>
On the code side of the story I am using a simplified MVVM pattern with a ViewModel supporting my control:
Imports
EScIS.Database
Imports
EScIS.MVVM.Base
Imports
System.ComponentModel
Imports
System.Collections.ObjectModel
Imports
System.Windows.Data
Imports
Telerik.Windows.Controls
Imports
Telerik.Windows.Controls.ScheduleView
Public
Class
MonitoringRoundsViewModel
Inherits
EScIS.MVVM.Base.ViewModelBase
Private
_context
As
ESdatEntities
Private
_monitoringRounds
As
ObservableCollection(Of Monitoring_Rounds)
Private
_monitoringRoundsView
As
ICollectionView
Private
_monitoringPrograms
As
ObservableCollection(Of LSPECS_Monitoring_Programs)
Private
_monitoringProgramsView
As
ICollectionView
Private
_monitoringRoundsAssignedMonitoringPrograms
As
ObservableCollection(Of LSPECS_Monitoring_Round_Assigned_Monitoring_Programs)
Private
_monitoringRoundsAssignedMonitoringProgramsView
As
ICollectionView
Private
_appointments
As
ObservableCollection(Of Appointment)
Private
_resourcesTypes
As
ObservableCollection(Of ResourceType)
Public
Property
MonitoringRoundsList()
As
ObservableCollection(Of Monitoring_Rounds)
Get
Return
Me
._monitoringRounds
End
Get
Set
(value
As
ObservableCollection(Of Monitoring_Rounds))
Me
._monitoringRounds = value
Me
.OnPropertyChanged(
"MonitoringRoundsList"
)
End
Set
End
Property
Public
Property
MonitoringProgramsList()
As
ObservableCollection(Of LSPECS_Monitoring_Programs)
Get
Return
Me
._monitoringPrograms
End
Get
Set
(value
As
ObservableCollection(Of LSPECS_Monitoring_Programs))
Me
._monitoringPrograms = value
Me
.OnPropertyChanged(
"MonitoringProgramsList"
)
End
Set
End
Property
Public
Property
MonitoringRoundsAssignedMonitoringProgramsList()
As
ObservableCollection(Of LSPECS_Monitoring_Round_Assigned_Monitoring_Programs)
Get
Return
Me
._monitoringRoundsAssignedMonitoringPrograms
End
Get
Set
(value
As
ObservableCollection(Of LSPECS_Monitoring_Round_Assigned_Monitoring_Programs))
Me
._monitoringRoundsAssignedMonitoringPrograms = value
Me
.OnPropertyChanged(
"MonitoringRoundsAssignedMonitoringProgramsList"
)
End
Set
End
Property
Public
Property
Appointments()
As
ObservableCollection(Of Appointment)
Get
Return
Me
._appointments
End
Get
Set
(value
As
ObservableCollection(Of Appointment))
Me
._appointments = value
Me
.OnPropertyChanged(
"Appointments"
)
End
Set
End
Property
Public
Property
ResourcesTypes()
As
ObservableCollection(Of ResourceType)
Get
Return
Me
._resourcesTypes
End
Get
Set
(value
As
ObservableCollection(Of ResourceType))
Me
._resourcesTypes = value
Me
.OnPropertyChanged(
"ResourcesTypes"
)
End
Set
End
Property
Public
Sub
New
()
Me
.Load(
Nothing
)
End
Sub
Protected
Overrides
Sub
Add(action
As
Object
)
End
Sub
Protected
Overrides
Sub
Delete(action
As
Object
)
End
Sub
Protected
Overrides
Sub
Edit(action
As
Object
)
End
Sub
Protected
Overrides
Sub
Load(action
As
Object
)
LoadData()
LoadCalendarData()
End
Sub
Public
Sub
LoadControlData()
Me
.Load(
Nothing
)
End
Sub
Private
Sub
LoadData()
Try
With
Me
._context
Me
._context =
New
ESdatEntities()
Me
.MonitoringRoundsList =
New
ObservableCollection(Of Monitoring_Rounds)(
From mr
In
Me
._context.Monitoring_Rounds
Select
mr)
Me
.MonitoringProgramsList =
New
ObservableCollection(Of LSPECS_Monitoring_Programs)(
From mp
In
Me
._context.LSPECS_Monitoring_Programs
Select
mp)
Me
.MonitoringRoundsAssignedMonitoringProgramsList =
New
ObservableCollection(Of LSPECS_Monitoring_Round_Assigned_Monitoring_Programs)(
From mramp
In
Me
._context.LSPECS_Monitoring_Round_Assigned_Monitoring_Programs
Select
mramp)
End
With
Catch
ex
As
Exception
Debug.WriteLine(ex.Message)
Throw
New
ApplicationException(
"Database Error: "
& ex.Message)
End
Try
Me
._monitoringRoundsView = CollectionViewSource.GetDefaultView(
Me
.MonitoringRoundsList)
Me
._monitoringProgramsView = CollectionViewSource.GetDefaultView(
Me
.MonitoringProgramsList)
Me
._monitoringRoundsAssignedMonitoringProgramsView = CollectionViewSource.GetDefaultView(
Me
.MonitoringRoundsAssignedMonitoringProgramsList)
Me
.OnPropertyChanged(
"MonitoringRoundsList"
)
Me
.OnPropertyChanged(
"MonitoringProgramsList"
)
Me
.OnPropertyChanged(
"MonitoringRoundsAssignedMonitoringProgramsList"
)
End
Sub
Private
Sub
LoadCalendarData()
'GenerateResourcesFromMonitoringPrograms()
'GenerateAppointmentsFromMonitoringPrograms()
'GenerateAppointmentsFromMonitoringRounds()
Me
.ResourcesTypes =
New
ObservableCollection(Of ResourceType)
Me
.Appointments =
New
ObservableCollection(Of Appointment)
End
Sub
Private
Sub
GenerateResourcesFromMonitoringPrograms()
Me
.ResourcesTypes =
New
ObservableCollection(Of ResourceType)
'Add monitoring program resource type
Dim
mpType
As
New
ResourceType(
"Monitoring Program"
)
'Add monitoring programs as resources
If
Me
._monitoringPrograms
Is
Nothing
Then
Return
End
If
For
Each
mp
In
_monitoringPrograms
Dim
res
As
New
Resource(mp.Monitoring_Program)
mpType.Resources.Add(res)
Next
Me
.ResourcesTypes.Add(mpType)
Me
.OnPropertyChanged(
"ResourcesTypes"
)
End
Sub
Private
Sub
GenerateAppointmentsFromMonitoringPrograms()
Me
.Appointments =
New
ObservableCollection(Of Appointment)
'Add monitoring programs as appointments
If
Me
._monitoringPrograms
Is
Nothing
Then
Return
End
If
For
Each
mp
In
_monitoringPrograms
Dim
app
As
New
Appointment()
app.Subject = mp.Monitoring_Program
app.Start = mp.Start_Date
app.
End
=
If
(mp.End_Date.HasValue, mp.End_Date, mp.Start_Date)
Me
.Appointments.Add(app)
Next
Me
.OnPropertyChanged(
"Appointments"
)
End
Sub
Private
Sub
GenerateAppointmentsFromMonitoringRounds()
If
Me
.Appointments
Is
Nothing
Then
Me
.Appointments =
New
ObservableCollection(Of Appointment)
End
If
'Add MonitoringRounds as appointments
If
Me
._monitoringRounds
Is
Nothing
Then
Return
End
If
For
Each
mr
In
_monitoringRounds
Dim
app
As
New
Appointment()
app.Subject = mr.Monitoring_Round
app.Start = mr.Start_Date
app.
End
=
If
(mr.End_Date.HasValue, mr.End_Date, mr.Start_Date)
Me
.Appointments.Add(app)
Next
Me
.OnPropertyChanged(
"Appointments"
)
End
Sub
Public
Overrides
Sub
Dispose()
If
Not
Me
.disposed
Then
Me
._context.Dispose()
Me
.disposed =
True
End
If
MyBase
.Dispose()
End
Sub
End
Class
On the ViewModel behind the window I basically set the visibility of the control to visible when a user clicks on a button. All this works fine.
Also at the moment I am not even trying to add any Appointments. I commented that bit of the code out to eliminate sources of problems. All I want is the control to display properly with the default view and no appointments.
When the control is rendered in run time all the header/menu structure renders fine, but the content area is blank. See attached photo for image of this.
At design time it appears to be fine since it displays the usual "Please set an Appointments Source" message.
Any idea what might be causing this?
Using:
Visual Studio 2010
Targeting .NET Framework 4.0
Windows 7
Telerik.Windows.Controls.ScheduleView vs. 2012.1.326.40
Thanks for your help in advance.