バージョン

コード例: カスタム クラスを使用して xamGantt のビューを作成

トピックの概要

目的

プロジェクト列、プロジェクト テーブルおよびプロジェクト ビューのカスタム クラスを作成し、これらのクラスを使用して xamGantt の外観をカスタマイズできます。

前提条件

このトピックを理解するためには、以下のトピックを理解しておく必要があります。

トピック 目的

このトピックでは、 xamGantt コントロールをページに追加する方法を説明します。

本トピックの内容

このトピックには次のセクションがあります。

コード例: xamGantt のためにカスタマイズされたビューを作成

説明

コード例はカスタム プロジェクト列クラス、カスタム プロジェクト テーブル クラスおよびカスタム プロジェクト ビュー クラスを作成する方法を示します。次に XAML で ListBackedProjectViewProvider を作成してその ColumnItemsSourceTableItemsSource および ViewItemsSource をこれらのカスタム オブジェクトの対応するコレクションに設定します。カスタム クラス間のマッピングは、ListBackedProjectViewProviderColumnPropertyMappingsTablePropertyMappings および ViewPropertyMappings プロパティで作成されます。

最後に、 xamGanttViewProvider プロパティは ListBackedProjectViewProvider インスタンスに設定されます。

このコード例にはサンプルのカスタム タスクのコレクションが含まれています。

前提条件

コード例を完了するには xamGantt プロジェクトが必要です。サンプルの xamGantt プロジェクトを作成するためには、xamGantt をページに追加の指示を復習してください。

次にプロジェクトを変更する必要があります。以下のクラスがプロジェクトに含まれているはずです:

マークアップと ProjectViewModel クラスをコードセクションに表示されるこれらで置き換える必要があります。

プレビュー

以下は完全なサンプル プロジェクトのプレビューです。ViewKey="View01" でスクリーンショットが撮られます。Id="View01"CustomProjectView クラスのこのインスタンスはクリティカル タスクだけでなくサマリー タスクを表示するように xamGantt を設定します。列セットは、カスタム ビューによって使用される CustomProjectTable クラス インスタンスの ColumnIds プロパティによって指定されます。

xamGantt Code Example Creating View for xamGantt using custom classes 1.png

コード

XAML の場合:

<Grid>
        <Grid.Resources>
            <local:ProjectViewModel x:Key="dc" />
        </Grid.Resources>
        <Grid.DataContext>
            <Binding Source="{StaticResource dc}" />
        </Grid.DataContext>
        <ig:ListBackedProjectViewProvider x:Name="lbpViewProvider" ColumnItemsSource="{Binding Columns}"
                                          TableItemsSource="{Binding Tables}" ViewItemsSource="{Binding CustomViews}">
            <ig:ListBackedProjectViewProvider.ColumnPropertyMappings>
                <ig:ProjectColumnPropertyMappingCollection UseDefaultMappings="True">
                    <ig:ProjectColumnPropertyMapping ColumnProperty="Id" DataObjectProperty="Id" />
                </ig:ProjectColumnPropertyMappingCollection>
            </ig:ListBackedProjectViewProvider.ColumnPropertyMappings>
            <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" Grid.Row="0" Project="{Binding SampleProject}"
                     ViewProvider="{Binding ElementName=lbpViewProvider}" ViewKey="View01" />
</Grid>

C# の場合:

public class ProjectViewModel :
INotifyPropertyChanged
    {
        #region Private variables
        private Project project;
        private ObservableCollection<CustomProjectView> views;
        private ObservableCollection<CustomProjectTable> tables;
        private ObservableCollection<CustomProjectColumn> columns;
        private CustomProjectView selectedView;
        #endregion // プライベート変数
        #region Public Properties
        public Project SampleProject
        {
            get
            {
                if (project == null)
                {
                    project = ProjectDataHelper.GenerateProjectData();
                }
                return project;
            }
            set
            {
                if (project != value)
                {
                    project = value;
                    OnPropertyChanged("SampleProject");
                }
            }
        }
        public CustomProjectView SelectedView
        {
            get
            {
                return selectedView;
            }
            set
            {
                if (value != selectedView)
                {
                    selectedView = value;
                    OnPropertyChanged("SelectedView");
                }
            }
        }
        public ObservableCollection<CustomProjectColumn> Columns
        {
            get
            {
                if (columns == null)
                {
                    columns = GenerateColumns();
                }
                return columns;
            }
        }
        public ObservableCollection<CustomProjectTable> Tables
        {
            get
            {
                if (tables == null)
                {
                    tables = GenerateTables();
                }
                return tables;
            }
            set
            {
                if (tables != value)
                {
                    tables = value;
                }
            }
        }
        public ObservableCollection<CustomProjectView> CustomViews
        {
            get
            {
                if (views == null)
                {
                    views = GenerateViews();
                }
                return views;
            }
            set
            {
                if (views != value)
                {
                    views = value;
                    OnPropertyChanged("CustomViews");
                }
            }
        }
        #endregion // パブリック プロパティ
        #region Private helpers
        private ObservableCollection<CustomProjectColumn> GenerateColumns()
        {
            return new ObservableCollection<CustomProjectColumn>()
            {
                new CustomProjectColumn
                {
                    Id = "idTaskName",
                    Key = "TaskName",
                    HeaderText = "Name"
                },
                new CustomProjectColumn
                {
                    Id = "idStart",
                    Key = "ManualStart",
                    HeaderText = "Start",
                    HeaderTextHorizontalAlignment = "Center"
                },
                new CustomProjectColumn
                {
                    Id = "idFinish",
                    Key = "ManualFinish",
                    HeaderText = "Finish",
                    HeaderTextHorizontalAlignment = "Center"
                },
                new CustomProjectColumn
                {
                    Id = "idDuration",
                    Key = "ManualDuration",
                    HeaderText = "Duration"
                },
                new CustomProjectColumn
                {
                    Id = "idPredecessors",
                    Key = "PredecessorsIdText",
                    HeaderText = "Predecessors"
                },
                new CustomProjectColumn
                {
                    Id="idIsCritical",
                    Key = "IsCritical",
                    HeaderText = "Is Critical"
                }
            };
        }
        private ObservableCollection<CustomProjectTable> GenerateTables()
        {
            return new ObservableCollection<CustomProjectTable>()
            {
                new CustomProjectTable
                {
                    Key = "Table01",
                    // コンマで区切られた列 ID、これは ProjectColumnProperty.DataItemId
プロパティ マッピングによって提供される
                    ColumnIds = "idTaskName, idStart, idDuration, idFinish, idPredecessors,
idIsCritical",
                    ShowInMenu = true
                },
                new CustomProjectTable
                {
                    Key = "Table02",
                    ColumnIds = "idTaskName, idStart, idFinish, idIsCritical",
                    ShowInMenu = true
                },
                new CustomProjectTable
                {
                    Key = "Table03",
                    ColumnIds = "idTaskName, idDuration, idPredecessors",
                    ShowInMenu = true
                }
            };
        }
        private ObservableCollection<CustomProjectView> GenerateViews()
        {
            return new ObservableCollection<CustomProjectView>()
            {
                new CustomProjectView
                {
                    Key = "View01",
                    AreSummaryTasksVisible = true,
                    AreCriticalTasksHighlighted = true,
                    // コンマで区切られた列キー、それぞれのキーは、列を昇順または降順で並べ替えることを示すために、オプションで 'Ascending' または
                    // 'Descending' という語を続けることができる
                    SortedColumns = "ManualStart, ManualFinish:Descending",
                    IsOutlineStructurePreservedWhenSorting = true,
                    TableKey = "Table01",
                    NonWorkingTimeHighlightStyle = "ActualNonWorkingHours"
                },
                new CustomProjectView
                {
                    Key = "View02",
                    TableKey = "Table02",
                    AreCriticalTasksHighlighted = false,
                    AreSummaryTasksVisible = false
                },
                new CustomProjectView
                {
                    Key = "View03",
                    TableKey = "Table03",
                    AreCriticalTasksHighlighted = true
                }
            };
        }
        #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 project As Project
      Private views As ObservableCollection(Of CustomProjectView)
      Private m_tables As ObservableCollection(Of CustomProjectTable)
      Private m_columns As ObservableCollection(Of CustomProjectColumn)
      Private m_selectedView As CustomProjectView
      #End Region
      #Region "Public Properties"
      Public Property SampleProject() As
Project
            Get
                  If project Is Nothing Then
                        project = ProjectDataHelper.GenerateProjectData()
                  End If
                  Return project
            End Get
            Set
                  If project <> value Then
                        project = value
                        OnPropertyChanged("SampleProject")
                  End If
            End Set
      End Property
      Public Property SelectedView() As
CustomProjectView
            Get
                  Return m_selectedView
            End Get
            Set
                  If value <> m_selectedView Then
                        m_selectedView = value
                        OnPropertyChanged("SelectedView")
                  End If
            End Set
      End Property
      Public ReadOnly Property Columns() As ObservableCollection(Of CustomProjectColumn)
            Get
                  If m_columns Is Nothing
Then
                        m_columns = GenerateColumns()
                  End If
                  Return m_columns
            End Get
      End Property
      Public Property Tables() As
ObservableCollection(Of CustomProjectTable)
            Get
                  If m_tables Is Nothing Then
                        m_tables = GenerateTables()
                  End If
                  Return m_tables
            End Get
            Set
                  If m_tables <> value Then
                        m_tables = value
                  End If
            End Set
      End Property
      Public Property CustomViews() As
ObservableCollection(Of CustomProjectView)
            Get
                  If views Is Nothing Then
                        views = GenerateViews()
                  End If
                  Return views
            End Get
            Set
                  If views <> value Then
                        views = value
                        OnPropertyChanged("CustomViews")
                  End If
            End Set
      End Property
      #End Region
      #Region "Private helpers"
      Private Function GenerateColumns() As
ObservableCollection(Of CustomProjectColumn)
            Return New ObservableCollection(Of CustomProjectColumn)() From
{ _
                  New CustomProjectColumn() With { _
                        Key .Id = "idTaskName", _
                        Key .Key = "TaskName", _
                        Key .HeaderText = "Name" _
                  }, _
                  New CustomProjectColumn() With { _
                        Key .Id = "idStart", _
                        Key .Key = "ManualStart", _
                        Key .HeaderText = "Start", _
                        Key .HeaderTextHorizontalAlignment = "Center" _
                  }, _
                  New CustomProjectColumn() With { _
                        Key .Id = "idFinish", _
                        Key .Key = "ManualFinish", _
                        Key .HeaderText = "Finish", _
                        Key .HeaderTextHorizontalAlignment = "Center" _
                  }, _
                  New CustomProjectColumn() With { _
                        Key .Id = "idDuration", _
                        Key .Key = "ManualDuration", _
                        Key .HeaderText = "Duration" _
                  }, _
                  New CustomProjectColumn() With { _
                        Key .Id = "idPredecessors", _
                        Key .Key = "PredecessorsIdText", _
                        Key .HeaderText = "Predecessors" _
                  }, _
                  New CustomProjectColumn() With { _
                        Key .Id = "idIsCritical", _
                        Key .Key = "IsCritical", _
                        Key .HeaderText = "Is Critical" _
                  } _
            }
      End Function
      Private Function GenerateTables() As
ObservableCollection(Of CustomProjectTable)
                        ' コンマで区切られた列 ID、これは ProjectColumnProperty.DataItemId
プロパティ マッピングによって提供される
            Return New ObservableCollection(Of CustomProjectTable)() From {
_
                  New CustomProjectTable() With { _
                        Key .Key = "Table01", _
                        Key .ColumnIds = "idTaskName, idStart, idDuration, idFinish, idPredecessors,
idIsCritical", _
                        Key .ShowInMenu = True _
                  }, _
                  New CustomProjectTable() With { _
                        Key .Key = "Table02", _
                        Key .ColumnIds = "idTaskName, idStart, idFinish, idIsCritical", _
                        Key .ShowInMenu = True _
                  }, _
                  New CustomProjectTable() With { _
                        Key .Key = "Table03", _
                        Key .ColumnIds = "idTaskName, idDuration, idPredecessors", _
                        Key .ShowInMenu = True _
                  } _
            }
      End Function
      Private Function GenerateViews() As
ObservableCollection(Of CustomProjectView)
                        ' コンマで区切られた列キー、それぞれのキーは、列を昇順または降順で並べ替えることを示すために、オプションで 'Ascending' または
                        ' 'Descending' という語を続けることができる
            Return New ObservableCollection(Of CustomProjectView)() From {
_
                  New CustomProjectView() With { _
                        Key .Key = "View01", _
                        Key .AreSummaryTasksVisible = True, _
                        Key .AreCriticalTasksHighlighted = True, _
                        Key .SortedColumns = "ManualStart, ManualFinish:Descending", _
                        Key .IsOutlineStructurePreservedWhenSorting = True, _
                        Key .TableKey = "Table01", _
                        Key .NonWorkingTimeHighlightStyle = "ActualNonWorkingHours" _
                  }, _
                  New CustomProjectView() With { _
                        Key .Key = "View02", _
                        Key .TableKey = "Table02", _
                        Key .AreCriticalTasksHighlighted = False, _
                        Key .AreSummaryTasksVisible = False _
                  }, _
                  New CustomProjectView() With { _
                        Key .Key = "View03", _
                        Key .TableKey = "Table03", _
                        Key .AreCriticalTasksHighlighted = True _
                  } _
            }
      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

このトピックについては、以下のトピックもあわせてご参照ください。

トピック 目的

このグループのトピックには、 xamGantt ListBackedProject ViewProvider の情報が含まれています。

このトピックでは、 xamGantt カレンダーの主要な機能の概要を提供します。xamGantt はカレンダーを使用して時間を計算します。

ListBackedProject ViewProvider と定義済みプロジェクト列、プロジェクト テーブル、プロジェクト ビュー クラスを使用することによってカスタマイズされた xamGantt ビューを作成できます。