Skip to main content

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.v23.2.dll

NuGet Package: DevExpress.Wpf.PropertyGrid

Declaration

public DataTemplateSelector PropertyDefinitionTemplateSelector { get; set; }

Property Value

Type Description
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.

<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>
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;
        }
    }
}

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