wpf-devexpress-dot-xpf-dot-propertygrid-dot-propertygridcontrol-7240f01f.md
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
public DataTemplateSelector PropertyDefinitionTemplateSelector { get; set; }
Public Property PropertyDefinitionTemplateSelector As DataTemplateSelector
| Type | Description |
|---|---|
| DataTemplateSelector |
A DataTemplateSelector descendant that chooses a template based on custom logic.
|
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;
}
}
}
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