如果說TimeLine,GanttPanel,TreeGrid是甘特圖控件的三個核心部件,那么Gantt則是這三個部件之間行為和數據的協調者,Gantt統一了這三個部件的接口,提供了更簡潔的開發能力。
架構提要:
功能:
設計:
在*.Gantt.Core 程序集中,可以發現大量的以Layout和Descriptor作為結尾的命名類,這些類構件了GanttPanel和TimeLine的計算模型和數據模型。
TimeLineViewer和TaskEntryViewer分別作為TimeLine和GanttPanel的視圖層。Viewer類會調用Renderer進行渲染。
1. 語法
1.1. XAML
2. 備注
2.1. 設置數據源
甘特圖控件目前僅支持特定的數據源格式: ObservableCollection<ITaskDescriptor>。其中ITaskDescriptor是單任務信息的數據接口,詳細信息參考Class Library中內容。
因此,面對來自不同類型數據源的任務信息,開發者必須編寫解析類或方法,將XML,JSON等類型的數據轉化為甘特圖指定的數據源類型。
除初始化設定數據源外,甘特圖控件允許分步加載數據,這是通過OnRequestData事件響應來實現的。
激發OnRequestData事件的條件時,展開當前任務,任務的ITaskDescriptor.EnableExpand=true,但ITaskDescriptor.Children.Count = 0;
示例代碼如下:
1) 事件處理函數邏輯
1: ObservableCollection<ITaskDescriptor> Gantt_OnRequestData(object sender, V2TEK.Silverlight.Charts.TreeGridHelper.RequestDataArgs args)
2: {
3: return GetSimWCFData();
4: }
5:
6: public ObservableCollection<ITaskDescriptor> GetSimWCFData()
7: {
8: return new ObservableCollection<ITaskDescriptor>
9: {
10: new SimpleTaskDescriptor{ TaskName="--------Sub Task 1", StartDate= DateTime.Now.AddMonths(4), EndDate=DateTime.Now.AddMonths(5), PercentComplete=25f,
TimeBaseLine=new SimpleTimeImpl{ StartDate=DateTime.Now.AddMonths(1), EndDate=DateTime.Now.AddMonths(10)} },
11: new SimpleTaskDescriptor{ TaskName="--------Sub Task 2", StartDate= DateTime.Now.AddMonths(2), EndDate=DateTime.Now.AddMonths(3), PercentComplete=50f },
12: new SimpleTaskDescriptor{ TaskName="--------Sub Task 3", StartDate= DateTime.Now.AddMonths(3), EndDate=DateTime.Now.AddMonths(5), PercentComplete=75f },
13: new SimpleTaskDescriptor{ TaskName="--------Sub Task 4", StartDate= DateTime.Now.AddMonths(5), EndDate=DateTime.Now.AddMonths(10), PercentComplete=100f }
14: };
15: }
2.2. 導航
導航指從指定任務的開始時間,或指定時間開始繪制甘特圖,免於使用滾動條搜尋。
1) 導航到指定任務
NavigateTo(ITaskDescriptor task)
2) 導航到選中任務
NavigateToSeleteItem()
3) 導航到當前時間
NavigateToCurrentDate()
4) 導航到指定時間
NavigateToDate(DateTime date)
2.3. 放大/縮小
根據TimeLine中定義的時間軸分級縮放機制逐級放大或縮小,提供了三個接口:
1) ZoomOut()
放大到下一級
2) ZoomIn()
縮小至上一級
3) ZoomToIndex(int index)
縮放至指定級別, Index即Dictionary<IDateTimeDescriptor, int>的索引。
此外,Gantt允許設置TimeLineSummaryDescriptors和TimeLineDetailDescriptors屬性值。
1) TimeLineSummaryDescriptors是上層時間軸的縮放分級定義。
2) TimeLineDetailDescriptors是下層時間軸的縮放分級定義。
2.4. 布局
除了通過以上接口更新Gantt的布局外,還可以通過下面的接口實現更為細致的布局更新。
Gantt提供了諸如XPosition,YPosition,GanttViewPortHeight,GanttViewPortWidth等布局的設定接口。在修改了這些布局屬性值后,須調用Update方法。當然,也可以分別調用GanttPanel.Update(), TreeGrid.Update, TimeLine.Update, 前提是開發者能夠確定需要更新那個子控件的布局。


