Programming with the new GanttView control
As many of you already know with Q1 2012 we introduced a RadGanttView for Silverlight and WPF - a control designed with MVVM-friendly API.
In this blog post we will set-up a sample project with RadGanttView to get you started.
First, to add RadGanttView to a new or existing application we need to add references to the following assemblies:
Telerik.Windows.Controls
Telerik.Windows.Controls.GanttView
Telerik.Windows.Scheduling.Core
Now, let’s add the telerik namespace:
xmlns:telerik=http://schemas.telerik.com/2008/xaml/presentation
Аnd add a sample definition of the control:
<telerik:RadGanttView/>
Image may be NSFW.
Clik here to view.
private IEnumerable <GanttTask> tasks;
public IEnumerable<GanttTask> Tasks
{
get
{
return tasks;
}
set
{
tasks = value;
OnPropertyChanged(() => Tasks);
}
}
var date = DateTime.Now;
var iterationTask = new GanttTask() { Start = date, End = date.AddDays(2), Title = "1/11/2012 - 1/12/2012 Iteration" };
var ganttAPI = new GanttTask() { Start = date, End = date.AddHours(16), Title = "Design public API" };
var ganttDemos = new GanttTask() { Start = date.AddHours(18), End = date.AddDays(1), Title = "Gantt Demos" };
var ganttRendering = new GanttTask() { Start = date.AddDays(1).AddHours(5), End = date.AddDays(2), Title = "Gantt Rendering" };
var milestone = new GanttTask() { Start = date.AddDays(2), End = date.AddDays(2).AddHours(1), Title = "Review", IsMilestone = true };
ganttAPI.SetRelations(new List<Relation>() { new Relation() { Task = ganttDemos } });
ganttDemos.SetRelations(new List<Relation>() { new Relation() { Task = ganttRendering } });
iterationTask.SetChildren(new ObservableCollection<GanttTask>() { ganttAPI, ganttDemos, ganttRendering, milestone });
var gTasks = new ObservableCollection<GanttTask>();
gTasks.Add(iterationTask);
this.Tasks = gTasks;
<telerik:RadGanttView TasksSource="{Binding Tasks}"/>
Image may be NSFW.
Clik here to view.
Configuring the VisibleRange property of Gantt control
To do this we will add a VisbleRange property in the ViewModel:private VisibleRange visibleRange;
public VisibleRange VisibleRange
{
get
{
return visibleRange;
}
set
{
if (visibleRange != value)
{
visibleRange = value;
OnPropertyChanged(() => VisibleRange);
}
}
}
this.VisibleRange = new VisibleRange(date, date.AddDays(9));
А
<telerik:RadGanttView TasksSource="{Binding Tasks}"
VisibleRange="{Binding VisibleRange}"/>
Image may be NSFW.
Clik here to view.
Configuring the grid panel
<telerik:RadGanttView TasksSource="{Binding Tasks}" VisibleRange="{Binding VisibleRange}">
<telerik:RadGanttView.Columns>
<telerik:ColumnDefinition MemberBinding="{Binding Start}" Header="Start" ColumnWidth="140" />
<telerik:ColumnDefinition MemberBinding="{Binding End}" Header="End" ColumnWidth="140" />
</telerik:RadGanttView.Columns>
</telerik:RadGanttView>
Image may be NSFW.
Clik here to view.
<telerik:ColumnDefinition MemberBinding="{Binding Start}" Header="Start" ColumnWidth="140" >
<telerik:ColumnDefinition.CellEditTemplate>
<DataTemplate>
<telerik:RadDateTimePicker SelectedValue="{Binding Start}" />
</DataTemplate>
</telerik:ColumnDefinition.CellEditTemplate>
</telerik:ColumnDefinition>
<telerik:ColumnDefinition MemberBinding="{Binding End}" Header="End" ColumnWidth="140">
<telerik:ColumnDefinition.CellEditTemplate>
<DataTemplate>
<telerik:RadDateTimePicker SelectedValue="{Binding End}" />
</DataTemplate>
</telerik:ColumnDefinition.CellEditTemplate>
</telerik:ColumnDefinition>
Image may be NSFW.
Clik here to view.
Clik here to view.