/// <summary> /// When overridden in a derived class, returns a <see cref="T:System.Windows.DataTemplate"/> based on custom logic. /// </summary> /// <param name="item">The data object for which to select the template.</param> /// <param name="container">The data-bound object.</param> /// <returns>Returns a <see cref="T:System.Windows.DataTemplate" /> or null. The default value is null.</returns> public override DataTemplate SelectTemplate(object item, DependencyObject container) { IDynamicList dynamicList = null; var filter = container.ParentOfType<RadDataFilter>(); if (filter != null) { dynamicList = filter.DataContext as IDynamicList; } var propertyDefinition = (ItemPropertyDefinition)item; var propertyType = propertyDefinition.PropertyType; if (dynamicList != null) { var column = dynamicList.Columns.FirstOrDefault(c => c.ColumnName == propertyDefinition.PropertyName); if (column != null) { propertyType = string.IsNullOrWhiteSpace(column.ReferenceTableName) ? column.Property.PropertyType : typeof(IInfoClass); } } foreach (var rule in EditorTemplateRules) { // Select the appropriate template for each property. if (rule.PropertyType == propertyType || rule.PropertyType == Nullable.GetUnderlyingType(propertyType)) { return rule.DataTemplate; } } return base.SelectTemplate(item, container); }
/// <summary> /// When overridden in a derived class, returns a DataTemplate based on custom logic. /// </summary> /// <param name="item">The data object for which to select the template.</param> /// <param name="container">The data-bound object.</param> /// <returns>DataTemplate.</returns> public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (item == null) return null; var filter = container.ParentOfType<RadDataFilter>(); if (filter == null) return base.SelectTemplate(item, container); var propertyDefinition = (ItemPropertyDefinition)item; if (propertyDefinition.PropertyName == Constants.VersionDate) { var editorTemplateRule = EditorTemplateRules.FirstOrDefault(x => x.PropertyType == typeof(DateTime)); if (editorTemplateRule != null) return editorTemplateRule.DataTemplate; } var propertyType = propertyDefinition.PropertyType; var format = DynamicDataFilterBehavior.GetDateTimeFormat(propertyDefinition); foreach (var rule in EditorTemplateRules) { if (rule.PropertyType == propertyType || rule.PropertyType == Nullable.GetUnderlyingType(propertyType)) { if (rule.PropertyType == typeof(DateTime) && rule.DateTimeFormat != format) continue; return rule.DataTemplate; } } return base.SelectTemplate(item, container); }
/// <summary> /// This recurse the visual tree for a parent of a specific type. /// </summary> internal static T GetParent <T>(this DependencyObject element) where T : FrameworkElement { return(element.ParentOfType <T>()); }
public static T GetVisualParent <T>(this DependencyObject element) where T : DependencyObject { return(element.ParentOfType <T>()); }