バージョン

ノード レイアウトの構成

表示するノードを決定し、ノードが表示される位置を決定するには、xamDataTree™ コントロールは「ノード レイアウト」と呼ばれる機能を使用します。xamDataTree の GlobalNodeLayouts コレクション内でひとつ以上の NodeLayout オブジェクトを定義できます。NodeLayouts はツリーのデータ タイプに対応するオブジェクトです。

NodeLayout オブジェクトを生成するためのデフォルトで最もシンプルな方法は、コントロールに任せることです。行う必要があるのは、コントロールで ItemsSource プロパティを設定し、xamDataTree コントロールの DisplayMemberPath プロパティを設定することだけです。

XAML の場合:

<ig:XamDataTree x:Name="MyTree" DisplayMemberPath="FirstName">

データはオブジェクトのリストであり、上記のコードはフラットで展開できないツリー情報 (基本的にリスト) を表示していることを前提しています。

xamDataTree Data Binding 0.png

グローバル レイアウト

ノードが xamDataTree コントロール内でどのように表示されるかを定義するために GlobalNodeLayouts コレクションにノード レイアウトを追加できます。

ツリーのノード レイアウトを定義するには、NodeLayout オブジェクトの以下のプロパティを設定する必要があります。

Key - このプロパティは、ノード レイアウトの一意の識別子を定義します。ツリーで子ノードの自動作成を有効にしたい場合は、このプロパティを初期コレクション内で当該のオブジェクトのプロパティに設定できます。実例については、「ローカル レイアウト」のセクションを参照してください。

TargetTypeName - このプロパティによって、データ ソース プロパティによって公開されるコレクションに含まれるオブジェクトである Type 名にこのプロパティ値を一致させるように xamWebTree を指示することで、NodeLayout とデータソース プロパティ間のマッピングを指定することができます。

DisplayMemberPath - このプロパティは、ツリーで表示されるオブジェクト タイプのプロパティを指定します。

以下のデータ オブジェクトがあることを前提とします。

Visual Basic の場合:

Public Class Parent
   Private _children As ObservableCollection
   Public Property FirstName As String
   End Property
   Public Property LastName As String
   End Property
   Public ReadOnly Property Children As ObservableCollection
      Get
         If (Me._children Is Nothing) Then
            Me._children = New ObservableCollection
         End If
         Return Me._children
      End Get
   End Property
End Class

C# の場合:

public class Parent
{
   ObservableCollection<Parent> _children;
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public ObservableCollection<Parent> Children
   {
      get
      {
         if (this._children == null)
            this._children = new ObservableCollection<Parent>();
         return this._children;
      }
   }
}

ノード レイアウトは以下のように定義されます。

XAML の場合:

<ig:XamDataTree.GlobalNodeLayouts>
   <ig:NodeLayout Key="ParentLayout" TargetTypeName="Parent"
                  DisplayMemberPath="FirstName">
   </ig:NodeLayout>
</ig:XamDataTree.GlobalNodeLayouts>

xamDataTree コントロールが TargetTypeName プロパティで定義される Parent オブジェクトのリストを検索する場合、必ずこの ParentLayout が使用されます。上記のコードは、以下のスクリーンショットで示すように、ParentThe の FirstName を示し、各 Parent の Children も表示します。

xamDataTree Data Binding 01.png

追加レイアウトの定義

xamDataTree コントロール内に表示される多くの異なるレイアウトを定義できます。これは、追加レイアウトを GlobalNodeLayout コレクションに追加することによって行うことができます。

以下のデータ オブジェクトがあることを前提とします。

Visual Basic の場合:

Public Class Parent
   Private _children As ObservableCollection
   Private _cars As ObservableCollection
   Public Property FirstName As String
   End Property
   Public Property LastName As String
   End Property
   Public ReadOnly Property Children As ObservableCollection
      Get
         If (Me._children Is Nothing) Then
            Me._children = New ObservableCollection
         End If
         Return Me._children
      End Get
   End Property
   Public ReadOnly Property Cars As ObservableCollection
      Get
         If (Me._cars Is Nothing) Then
            Me._cars = New ObservableCollection
         End If
         Return Me._cars
      End Get
   End Property
End Class
Public Class Cars
   Public Property Name As String
   End Property
End Class

C# の場合:

public class Parent
{
   ObservableCollection<Parent> _children;
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public ObservableCollection<Parent> Children
   {
      get
      {
         if (this._children == null)
            this._children = new ObservableCollection<Parent>();
         return this._children;
      }
   }
   ObservableCollection<Cars> _cars;
   public ObservableCollection<Cars> Cars
   {
      get
      {
         if (this._cars == null)
         {
            this._cars = new ObservableCollection<Cars>();
         }
         return this._cars;
      }
   }
}
public class Cars
{
   public string Name { get; set; }
}

以下のコードは、CarLayout という名前の新しいレイアウトを GlobalNodeLayout コレクションに追加する方法を示します。

XAML の場合:

<ig:XamDataTree.GlobalNodeLayouts>
   <ig:NodeLayout Key="ParentLayout" TargetTypeName="Parent"
                  DisplayMemberPath="FirstName"/>
   <ig:NodeLayout Key="CarLayout" TargetTypeName="Cars" DisplayMemberPath="Name"/>
</ig:XamDataTree.GlobalNodeLayouts>

以下のスクリーンショットは、2 つの定義されたレイアウトでツリーを示します。

xamDataTree Data Binding 02.png

ローカル レイアウト

GlobalNodeLayouts コレクションにないノード レイアウトを定義することもできます。これによってノードがどのように表示されるかをさらに制御することができ、個々のノードをカスタマイズする機能も提供します。

たとえば、以下のコードでは、ローカル ノード レイアウトが定義されて、最初のコレクションでオブジェクトの Children プロパティにバインドされ、それらのオブジェクトの LastName を表示します。この状況では TargetTypeName を設定する必要はありません。

XAML の場合:

<ig:XamDataTree x:Name="MyTree" DisplayMemberPath="FirstName">
   <ig:XamDataTree.NodeLayouts>
      <ig:NodeLayout Key="Children" DisplayMemberPath="LastName"/>
   </ig:XamDataTree.NodeLayouts>
</ig:XamDataTree>
xamDataTree Data Binding 03.png

関連トピック