Skip to main content

DockLayoutManager.ItemTemplateSelector Property

Gets or sets a DataTemplateSelector object that provides a way to choose a DataTemplate to render items stored in the DockLayoutManager.ItemsSource collection.

Namespace: DevExpress.Xpf.Docking

Assembly: DevExpress.Xpf.Docking.v24.1.dll

NuGet Package: DevExpress.Wpf.Docking

Declaration

public DataTemplateSelector ItemTemplateSelector { get; set; }

Property Value

Type Description
DataTemplateSelector

A DataTemplateSelector object that provides a way to choose a DataTemplate to render items stored in the DockLayoutManager.ItemsSource collection.

Remarks

A DataTemplate allows you to specify the visualization for DockLayoutManager items stored in the DockLayoutManager.ItemsSource collection. Using a DataTemplateSelector you can apply your own logic to choose a DataTemplate. To implement this functionality, define a class derived from a DataTemplateSelector, override the SelectTemplate method and assign an instance of this class to the ItemTemplateSelector property.

If no DataTemplateSelector object is assigned to the ItemTemplateSelector property, a DataTemplate assigned to the DockLayoutManager.ItemTemplate property will be used. If the DataTemplateSelector returns null no DataTemplate will be used.

To learn more, see Choosing Templates Based on Custom Logic.

Example

The following example shows how to create layout items (LayoutPanel and DocumentPanel objects) from a data source according to the MVVM design pattern and how to implement template selection.

In this example, the MainViewModel class provides the Items collection that contains objects to be rendered as layout items in the DockLayoutManager. An instance of the MainViewModel class is assigned to the Window’s DataContext. The DockLayoutManager.ItemsSource property is bound to the Items property in the MainViewModel. This way, the DockLayoutManager gets the source of objects to be visualized as layout items.

The Items collection contains items of two types:

  • ViewModel objects - contain data for creating LayoutPanels
  • DocumentViewModel objects - contain data for creating DocumentPanels

There are two templates declared in XAML that render input objects as either LayoutPanels or DocumentPanels.

The custom DockItemTemplateSelector class overrides the SelectTemplate method to choose a template that corresponds to a specific item in the DockLayoutManager.ItemsSource. This template selector is assigned in XAML to the DockLayoutManager.ItemTemplateSelector property.

In this example, the DockLayoutManager contains two groups explicitly created in XAML: a LayoutGroup named panelHost and a DocumentGroup named documentHost. Items from the Items collection are automatically placed in one of these groups based on their IMVVMDockingProperties.TargetName property values.

View Example

Imports DevExpress.Xpf.Docking
Imports DevExpress.Mvvm
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Linq
Imports System.Text
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Imaging
Imports System.Windows.Navigation
Imports System.Windows.Shapes

Namespace WpfApplication19
    ''' <summary>
    ''' Interaction logic for MainWindow.xaml
    ''' </summary>
    Partial Public Class MainWindow
        Inherits Window

        Public Sub New()
            InitializeComponent()
        End Sub
    End Class
    Public Class MainViewModel
        Inherits ViewModelBase

        Public Sub New()
            Items = New ObservableCollection(Of Object)() From { _
                New ViewModel() With {.DisplayName = "Item1"}, _
                New ViewModel() With {.DisplayName = "Item2"}, _
                New DocumentViewModel() With {.DisplayName = "Item3"}, _
                New DocumentViewModel() With {.DisplayName = "Item4"} _
            }
        End Sub
        ' Fields...
        Private _Items As ObservableCollection(Of Object)

        Public Property Items() As ObservableCollection(Of Object)
            Get
                Return _Items
            End Get
            Private Set(ByVal value As ObservableCollection(Of Object))
                SetProperty(_Items, value, "Items")
            End Set
        End Property
    End Class
    Public Class DocumentViewModel
        Inherits ViewModel
        Implements IMVVMDockingProperties

        Protected Overrides Function GetTargetName() As String
            Return "documentHost"
        End Function
    End Class
    Public Class ViewModel
        Inherits ViewModelBase
        Implements IMVVMDockingProperties

        ' Fields...
        Private _DisplayName As String

        Public Property DisplayName() As String
            Get
                Return _DisplayName
            End Get
            Set(ByVal value As String)
                SetProperty(_DisplayName, value, "DisplayName")
            End Set
        End Property
        Protected Overridable Function GetTargetName() As String
            Return "panelHost"
        End Function
        #Region "IMVVMDockingProperties Members"

        Private Property IMVVMDockingProperties_TargetName() As String Implements IMVVMDockingProperties.TargetName
            Get
                Return GetTargetName()
            End Get
            Set(ByVal value As String)
                Throw New NotImplementedException()
            End Set
        End Property

        #End Region
    End Class
    Public Class DockItemTemplateSelector
        Inherits DataTemplateSelector

        Public Property LayoutPanelTemplate() As DataTemplate
        Public Property DocumentPanelTemplate() As DataTemplate
        Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
            Return If(TypeOf item Is DocumentViewModel, DocumentPanelTemplate, LayoutPanelTemplate)
        End Function
    End Class
End Namespace
See Also