Back to Devexpress

PropertyGridControl.PropertyDefinitionTemplateSelector Property

wpf-devexpress-dot-xpf-dot-propertygrid-dot-propertygridcontrol-7240f01f.md

latest5.6 KB
Original Source

PropertyGridControl.PropertyDefinitionTemplateSelector Property

Gets or sets an object that chooses a property definition template based on custom logic. This is a dependency property.

Namespace : DevExpress.Xpf.PropertyGrid

Assembly : DevExpress.Xpf.PropertyGrid.v25.2.dll

NuGet Package : DevExpress.Wpf.PropertyGrid

Declaration

csharp
public DataTemplateSelector PropertyDefinitionTemplateSelector { get; set; }
vb
Public Property PropertyDefinitionTemplateSelector As DataTemplateSelector

Property Value

TypeDescription
DataTemplateSelector

A DataTemplateSelector descendant that chooses a template based on custom logic.

|

Remarks

A template that defines the presentation of property definitions is specified by the PropertyGridControl.PropertyDefinitionTemplate property. If you have more than one template that can be used to render property definitions, you can implement custom logic to choose the required template. To do this, derive from the DataTemplateSelector class, implement the SelectTemplate method that returns a template which meets the required condition, and assign it to the PropertyDefinitionTemplateSelector property.

xaml
<Window.Resources>
    <local:PropertyDefinitionTemplateSelector x:Key="PropertyDefinitionTemplateSelector"/>
    <DataTemplate x:Key="PropertyTemplate">
        <dxprg:PropertyDefinition Path="{Binding Name}" />
    </DataTemplate>
    <DataTemplate x:Key="CollectionTemplate">
        <dxprg:CollectionDefinition Path="{Binding CollectionName}" />
    </DataTemplate>
</Window.Resources>
<Grid>
    <dxprg:PropertyGridControl SelectedObject="{Binding EditObject}"
                               PropertyDefinitionsSource="{Binding Properties}"
                               PropertyDefinitionTemplateSelector="{StaticResource PropertyDefinitionTemplateSelector}"
                               ShowProperties="WithPropertyDefinitions" 
                               ExpandCategoriesWhenSelectedObjectChanged="True"/>
</Grid>
csharp
using System.Windows;
using System.Windows.Controls;

namespace WpfApplication1 {
    public class PropertyDefinitionTemplateSelector : DataTemplateSelector {
        public override DataTemplate SelectTemplate(object item, DependencyObject container) {
            Property propDef = (Property)item;
            FrameworkElement element = (FrameworkElement)container;

            if(!string.IsNullOrEmpty(propDef.CollectionName)) {
                return element.TryFindResource("CollectionTemplate") as DataTemplate;
            }
            return element.TryFindResource("PropertyTemplate") as DataTemplate;
        }
    }
}
vb
Imports System.Windows
Imports System.Windows.Controls

Namespace WpfApplication1
    Public Class PropertyDefinitionTemplateSelector
        Inherits DataTemplateSelector

        Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate
            Dim propDef As [Property] = CType(item, [Property])
            Dim element As FrameworkElement = CType(container, FrameworkElement)

            If Not String.IsNullOrEmpty(propDef.CollectionName) Then
                Return TryCast(element.TryFindResource("CollectionTemplate"), DataTemplate)
            End If

            Return TryCast(element.TryFindResource("PropertyTemplate"), DataTemplate)
        End Function
    End Class
End Namespace

Note

Both the PropertyGridControl.PropertyDefinitionTemplate and PropertyDefinitionTemplateSelector properties are in effect when the PropertyGridControl is bound to a property definition source via the PropertyGridControl.PropertyDefinitionsSource property. Refer to the Binding to a collection of PropertyDefinitions topic to learn more.

Refer to the following help topic for more information: Appearance Customization.

See Also

Binding to a collection of PropertyDefinitions

Choosing Templates Based on Custom Logic

PropertyGridControl Class

PropertyGridControl Members

DevExpress.Xpf.PropertyGrid Namespace