ListBackedProjectViewProvider と定義済みプロジェクト列、プロジェクト テーブル、プロジェクト ビュー クラスを使用することによってカスタマイズされた xamGantt ビューを作成できます。
このトピックを理解するためには、以下のトピックを理解しておく必要があります。
コード例は定義済みの ProjectColumn、 ProjectTable および ProjectView クラスを使用することによって xamGantt ビューをカスタマイズする方法を示します。次に XAML で ListBackedProjectViewProvider を作成し、その TableItemsSource と ViewItemsSource をプロジェクト テーブルおよびプロジェクト ビューの対応するコレクションに設定します。カスタム クラス間のマッピングは、ListBackedProjectViewProvider
の TablePropertyMappings プロパティと ViewPropertyMappings プロパティで作成されます。
最後に、xamGantt の ViewProvider プロパティは ListBackedProjectViewProvider
インスタンスに設定されます。
注:
コード例を完了するには xamGantt プロジェクトが必要です。サンプルの xamGantt プロジェクトを作成するためには、 xamGantt をページに追加の指示に従ってください。マークアップと ProjectViewModel
クラスをコード セクションに表示されるこれらで置き換える必要があります。
以下は完全なサンプル プロジェクトのプレビューです。ViewKey`
=”Standard01”` でスクリーンショットが撮られます。Key=“Standard01”
の ProjectView
クラスのこのインスタンスはクリティカル タスクだけでなくサマリー タスクを表示するように xamGantt を設定します。列セットは、Columns
プロパティによって制御されます。
XAML の場合:
<Grid>
<Grid.Resources>
<local:ProjectViewModel x:Key="dc" />
</Grid.Resources>
<Grid.DataContext>
<Binding Source="{StaticResource dc}" />
</Grid.DataContext>
<ig:ListBackedProjectViewProvider x:Name="lbpViewProvider" TableItemsSource="{Binding Tables}" ViewItemsSource="{Binding Views}">
<ig:ListBackedProjectViewProvider.TablePropertyMappings>
<ig:ProjectTablePropertyMappingCollection UseDefaultMappings="True" />
</ig:ListBackedProjectViewProvider.TablePropertyMappings>
<ig:ListBackedProjectViewProvider.ViewPropertyMappings>
<ig:ProjectViewPropertyMappingCollection UseDefaultMappings="True" />
</ig:ListBackedProjectViewProvider.ViewPropertyMappings>
</ig:ListBackedProjectViewProvider>
<ig:XamGantt x:Name="xamGantt" ViewProvider="{Binding ElementName=lbpViewProvider}" Project="{Binding Project}" ViewKey="Standard01" />
</Grid>
C# の場合:
public class ProjectViewModel :
INotifyPropertyChanged
{
#region Private variables
private ObservableCollection<ProjectView> views;
private ObservableCollection<ProjectTable> tables;
private ObservableCollection<ProjectColumn> columns;
private Project project;
#endregion // プライベート変数
#region Public Properties
public Project Project
{
get
{
if (project == null)
{
project = ProjectDataHelper.GenerateProjectData();
}
return project;
}
set
{
if (value != project)
{
project = value;
OnPropertyChanged("Project");
}
}
}
public ObservableCollection<ProjectColumn> Columns
{
get
{
if (columns == null)
{
columns = GenerateColumns();
}
return columns;
}
}
public ObservableCollection<ProjectTable> Tables
{
get
{
if (tables == null)
{
tables = GenerateTables();
}
return tables;
}
}
public ObservableCollection<ProjectView> Views
{
get
{
if (views == null)
{
views = GenerateViews();
}
return views;
}
}
#endregion // パブリック プロパティ
#region Private helper methods
private ObservableCollection<ProjectView> GenerateViews()
{
ObservableCollection<ProjectView> views = new ObservableCollection<ProjectView>
();
ProjectView view = new ProjectView
{
Key = "Standard01",
TableKey = "Table 01",
Settings = new ProjectViewSettings
{
AreSummaryTasksVisible = true,
AreCriticalTasksHighlighted = true,
IsOutlineStructurePreservedWhenSorting = true,
NonWorkingTimeHighlightStyle = NonWorkingTimeHighlightStyle.ActualNonWorkingHours
}
};
view.SortedColumns.Add(new ProjectColumnSortDescription { ColumnKey = "ManualStart" });
view.SortedColumns.Add(new ProjectColumnSortDescription { ColumnKey = "ManualFinish", Direction = ListSortDirection.Descending });
views.Add(view);
view = new ProjectView { Key = "Standard02", TableKey = "Table 02" };
views.Add(view);
return views;
}
private ObservableCollection<ProjectTable> GenerateTables()
{
var columnsMap = Columns.ToDictionary(c => c.Key);
ObservableCollection<ProjectTable> tables = new
ObservableCollection<ProjectTable>();
ProjectTable table = new ProjectTable { Key = "Table 01",
ShowInMenu = true };
table.Columns.Add(columnsMap["TaskName"]);
table.Columns.Add(columnsMap["ManualStart"]);
table.Columns.Add(columnsMap["ManualDuration"]);
table.Columns.Add(columnsMap["ManualFinish"]);
tables.Add(table);
table = new ProjectTable { Key = "Table 02", ShowInMenu = true };
table.Columns.Add(columnsMap["TaskName"]);
table.Columns.Add(columnsMap["ManualStart"]);
table.Columns.Add(columnsMap["ManualFinish"]);
table.Columns.Add(columnsMap["Notes"]);
tables.Add(table);
return tables;
}
private ObservableCollection<ProjectColumn> GenerateColumns()
{
return new ObservableCollection<ProjectColumn>()
{
new ProjectColumn { Key = "TaskName", HeaderText = "Name"},
new ProjectColumn { Key = "ManualStart", HeaderText = "Start",
Settings = new ProjectColumnSettings { HeaderTextHorizontalAlignment =
HorizontalAlignment.Center}},
new ProjectColumn { Key = "ManualFinish", HeaderText = "Finish",
Settings = new ProjectColumnSettings { HeaderTextHorizontalAlignment =
HorizontalAlignment.Center}},
new ProjectColumn { Key = "ManualDuration", HeaderText =
"Duration"},
new ProjectColumn { Key = "Notes", HeaderText = "Notes"}
};
}
#endregion // プライベート ヘルパー メソッド
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string
propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs
(propertyName));
}
}
#endregion // INotifyPropertyChanged
}
Visual Basic の場合:
Public Class ProjectViewModel
Implements INotifyPropertyChanged
#Region "Private variables"
Private m_views As ObservableCollection(Of ProjectView)
Private m_tables As ObservableCollection(Of ProjectTable)
Private m_columns As ObservableCollection(Of ProjectColumn)
Private m_project As Project
#End Region
#Region "Public Properties"
Public Property Project() As Project
Get
If m_project Is Nothing
Then
m_project = ProjectDataHelper.GenerateProjectData()
End If
Return m_project
End Get
Set
If value <> m_project Then
m_project = value
OnPropertyChanged("Project")
End If
End Set
End Property
Public ReadOnly Property Columns() As ObservableCollection(Of ProjectColumn)
Get
If m_columns Is Nothing
Then
m_columns = GenerateColumns()
End If
Return m_columns
End Get
End Property
Public ReadOnly Property Tables() As ObservableCollection(Of ProjectTable)
Get
If m_tables Is Nothing Then
m_tables = GenerateTables()
End If
Return m_tables
End Get
End Property
Public ReadOnly Property Views() As ObservableCollection(Of ProjectView)
Get
If m_views Is Nothing Then
m_views = GenerateViews()
End If
Return m_views
End Get
End Property
#End Region
#Region "Private helper methods"
Private Function GenerateViews() As
ObservableCollection(Of ProjectView)
Dim views As New
ObservableCollection(Of ProjectView)()
Dim view As New ProjectView()
With { _
Key .Key = "Standard01", _
Key .TableKey = "Table 01", _
Key .Settings = New ProjectViewSettings() With { _
Key .AreSummaryTasksVisible = True, _
Key .AreCriticalTasksHighlighted = True, _
Key .IsOutlineStructurePreservedWhenSorting = True, _
Key .NonWorkingTimeHighlightStyle = NonWorkingTimeHighlightStyle.ActualNonWorkingHours _
} _
}
view.SortedColumns.Add(New ProjectColumnSortDescription() With
{ _
Key .ColumnKey = "ManualStart" _
})
view.SortedColumns.Add(New ProjectColumnSortDescription() With
{ _
Key .ColumnKey = "ManualFinish", _
Key .Direction = ListSortDirection.Descending _
})
views.Add(view)
view = New ProjectView() With { _
Key .Key = "Standard02", _
Key .TableKey = "Table 02" _
}
views.Add(view)
Return views
End Function
Private Function GenerateTables() As
ObservableCollection(Of ProjectTable)
Dim columnsMap = Columns.ToDictionary(Function(c) c.Key)
Dim tables As New
ObservableCollection(Of ProjectTable)()
Dim table As New ProjectTable()
With { _
Key .Key = "Table 01", _
Key .ShowInMenu = True _
}
table.Columns.Add(columnsMap("TaskName"))
table.Columns.Add(columnsMap("ManualStart"))
table.Columns.Add(columnsMap("ManualDuration"))
table.Columns.Add(columnsMap("ManualFinish"))
tables.Add(table)
table = New ProjectTable() With { _
Key .Key = "Table 02", _
Key .ShowInMenu = True _
}
table.Columns.Add(columnsMap("TaskName"))
table.Columns.Add(columnsMap("ManualStart"))
table.Columns.Add(columnsMap("ManualFinish"))
table.Columns.Add(columnsMap("Notes"))
tables.Add(table)
Return tables
End Function
Private Function GenerateColumns() As
ObservableCollection(Of ProjectColumn)
Return New ObservableCollection(Of ProjectColumn)() From { _
New ProjectColumn() With { _
Key .Key = "TaskName", _
Key .HeaderText = "Name" _
}, _
New ProjectColumn() With { _
Key .Key = "ManualStart", _
Key .HeaderText = "Start", _
Key .Settings = New ProjectColumnSettings() With {
_
Key .HeaderTextHorizontalAlignment = HorizontalAlignment.Center _
} _
}, _
New ProjectColumn() With { _
Key .Key = "ManualFinish", _
Key .HeaderText = "Finish", _
Key .Settings = New ProjectColumnSettings() With {
_
Key .HeaderTextHorizontalAlignment = HorizontalAlignment.Center _
} _
}, _
New ProjectColumn() With { _
Key .Key = "ManualDuration", _
Key .HeaderText = "Duration" _
}, _
New ProjectColumn() With { _
Key .Key = "Notes", _
Key .HeaderText = "Notes" _
} _
}
End Function
#End Region
#Region "INotifyPropertyChanged"
Public Event PropertyChanged As
PropertyChangedEventHandler
Public Sub OnPropertyChanged(propertyName As String)
RaiseEvent PropertyChanged(Me, New
PropertyChangedEventArgs(propertyName))
End Sub
#End Region
End Class
このトピックについては、以下のトピックもあわせてご参照ください。