バージョン

データにバインドする

このチュートリアルでは、 xamTimeline をカスタム データ コレクションにバインドする方法を紹介します。データ モデルの定義、xamTimeline コントロールのアプリケーションへの追加、データ コレクションのインスタンスを作成、コントロールにデータをバインドする方法を学びます。

このチュートリアルでは、以下のようなアプリケーションを作成します。

xamTimeline Binding to Data 01.png

xamTimeline コントロールの追加

始めに、アプリケーションに xamTimeline コントロールのインスタンスを追加します。対応する NuGet パッケージをアプリケーションに追加します。

  • Infragistics.WPF.Timeline

NuGet フィードのセットアップと NuGet パッケージの追加の詳細については、NuGet フィード ドキュメントを参照してください。

次に、XAML 名前空間参照を追加します。

XAML の場合:

xmlns:ig="http://schemas.infragistics.com/xaml"

レイアウト ルートにコントロールのインスタンスを追加します。

XAML の場合:

<Grid x:Name="LayoutRoot" Background="White">
    <ig:XamTimeline x:Name="xamTimeline" />
</Grid>

データ クラスの定義

コレクションのモデル データにクラスを作成します。以下のコードは、タイムライン データを表す型を作成します。

C# の場合:

public class TimelineData
{
    public TimelineData() { }
    public TimelineData(int newTime, int newDuration, string newTitle, string newDetails)
    {
        Time = newTime;
        Duration = newDuration;
        Title = newTitle;
        Details = newDetails;
    }
    public int Time { get; set; }
    public int Duration { get; set; }
    public string Title { get; set; }
    public string Details { get; set; }
}

Visual Basic の場合:

Public Class TimelineData
    Public Sub New()
    End Sub
    Public Sub New(newTime As Integer, newDuration As Integer, newTitle As String, newDetails As String)
        Time = newTime
        Duration = newDuration
        Title = newTitle
        Details = newDetails
    End Sub
    Public Property Time() As Integer
        Get
            Return m_Time
        End Get
        Set
            m_Time = Value
        End Set
    End Property
    Private m_Time As Integer
    Public Property Duration() As Integer
        Get
            Return m_Duration
        End Get
        Set
            m_Duration = Value
        End Set
    End Property
    Private m_Duration As Integer
    Public Property Title() As String
        Get
            Return m_Title
        End Get
        Set
            m_Title = Value
        End Set
    End Property
    Private m_Title As String
    Public Property Details() As String
        Get
            Return m_Details
        End Get
        Set
            m_Details = Value
        End Set
    End Property
    Private m_Details As String
End Class

データを初期化してバインドする

データ コレクションを初期化して xamTimeline コントロール インスタンスにバインドします。コードビハインドに適切な名前空間宣言を追加します:

C# の場合:

using System.Collections.ObjectModel;
using Infragistics.Controls.Timelines;

Visual Basic の場合:

Imports System.Collections.ObjectModel
Imports Infragistics.Controls.Timelines

MainPage コンストラクター内に以下のようにコレクションのインスタンスを作成します。

C# の場合:

var collection = new ObservableCollection<TimelineData>();
for (int i = 1; i < 10; i++)
{
    var dataEntry = new TimelineData()
    {
        Time = i * 100,
        Duration = 10,
        Title = "Data Title " + i,
        Details = "Data Description " + i
    };
    collection.Add(dataEntry);
}

Visual Basic の場合:

Dim collection As New ObservableCollection(Of TimelineData)()
For i As Integer = 1 To 9
    Dim dataEntry As New TimelineData() With { _
        Key .Time = i * 100, _
        Key .Duration = 10, _
        Key .Title = "Data Title " & i, _
        Key .Details = "Data Description " & i _
    }
    collection.Add(dataEntry)
Next

NumericTimeSeries オブジェクトのインスタンスを作成し、このコレクションにバインドします。

C# の場合:

var series = new NumericTimeSeries();
series.Title = "Series With Data Binding";
series.DataSource = collection;

Visual Basic の場合:

Dim series As New NumericTimeSeries()
series.Title = "Series With Data Binding"
series.DataSource = collection

データ マッピング

最後に、DataMapping を定義し xamTimeline コントロールの Series コレクションにシリーズを追加する必要があります。DataMapping 文字列によって、データ ソース メンバーと各タイムライン エントリの特性間のマッピングを定義することができます。この場合、4 ステートメントから構成される文字列は各タイムライン エントリである Time、Duration、Title および Details をデータ ソースの同じ名前のメンバーへマップします。

C# の場合:

series.DataMapping = "Time=Time;Duration=Duration;Title=Title;Details=Details";
this.xamTimeline.Series.Add(series);

Visual Basic の場合:

series.DataMapping = "Time=Time;Duration=Duration;Title=Title;Details=Details"
Me.xamTimeline.Series.Add(series)

アプリケーションの実行

ここまでで、xamTimeline コントロールをカスタムデータコレクションへバインドしました。アプリケーションは以下のようになります。

xamTimeline Binding to Data 01.png

全コード例

以下は完全なコードです。

ビュー

XAML の場合:

<UserControl x:Class="Application1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:ig="http://schemas.infragistics.com/xaml"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">
        <ig:XamTimeline x:Name="xamTimeline" />
    </Grid>
</UserControl>

コード ビハインド

C# の場合:

using System.Windows.Controls;
using System.Collections.ObjectModel;
using Infragistics.Controls.Timelines;
namespace Application1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            var collection = new ObservableCollection<TimelineData>();
            for (int i = 1; i < 10; i++)
            {
                var dataEntry = new TimelineData()
                {
                    Time = i * 100,
                    Duration = 10,
                    Title = "Data Title " + i,
                    Details = "Data Description " + i
                };
                collection.Add(dataEntry);
            }
            var series = new NumericTimeSeries();
            series.Title = "Series With Data Binding";
            series.DataSource = collection;
            series.DataMapping = "Time=Time;Duration=Duration;Title=Title;Details=Details";
            this.xamTimeline.Series.Add(series);
        }
    }
    public class TimelineData
    {
        public TimelineData() { }
        public TimelineData(int newTime, int newDuration, string newTitle, string newDetails)
        {
            Time = newTime;
            Duration = newDuration;
            Title = newTitle;
            Details = newDetails;
        }
        public int Time { get; set; }
        public int Duration { get; set; }
        public string Title { get; set; }
        public string Details { get; set; }
    }
}

Visual Basic の場合:

Imports System.Windows.Controls
Imports System.Collections.ObjectModel
Imports Infragistics.Controls.Timelines
Namespace Application1
    Public Partial Class MainPage
        Inherits UserControl
        Public Sub New()
            InitializeComponent()
            Dim collection As New ObservableCollection(Of TimelineData)()
            For i As Integer = 1 To 9
                Dim dataEntry As New TimelineData() With { _
                    Key .Time = i * 100, _
                    Key .Duration = 10, _
                    Key .Title = "Data Title " & i, _
                    Key .Details = "Data Description " & i _
                }
                collection.Add(dataEntry)
            Next
            Dim series As New NumericTimeSeries()
            series.Title = "Series With Data Binding"
            series.DataSource = collection
            series.DataMapping = "Time=Time;Duration=Duration;Title=Title;Details=Details"
            Me.xamTimeline.Series.Add(series)
        End Sub
    End Class
    Public Class TimelineData
        Public Sub New()
        End Sub
        Public Sub New(newTime As Integer, newDuration As Integer, newTitle As String, newDetails As String)
            Time = newTime
            Duration = newDuration
            Title = newTitle
            Details = newDetails
        End Sub
        Public Property Time() As Integer
            Get
                Return m_Time
            End Get
            Set
                m_Time = Value
            End Set
        End Property
        Private m_Time As Integer
        Public Property Duration() As Integer
            Get
                Return m_Duration
            End Get
            Set
                m_Duration = Value
            End Set
        End Property
        Private m_Duration As Integer
        Public Property Title() As String
            Get
                Return m_Title
            End Get
            Set
                m_Title = Value
            End Set
        End Property
        Private m_Title As String
        Public Property Details() As String
            Get
                Return m_Details
            End Get
            Set
                m_Details = Value
            End Set
        End Property
        Private m_Details As String
    End Class
End Namespace