Селектор шаблонов RadGridView

Я использую RadGridView для отображения группы элементов в сетке. Для каждого элемента я хочу переключаться между двумя различными шаблонами в зависимости от данных. Одним из них является свойство зависимостей, которое по существу извлекает текстовый блок, другим является другой RadGridView для отображения таблицы.

При статической установке они работают по отдельности, но я хочу динамически выбирать эти два разных шаблона. Однако мой селектор не вызывается, поэтому шаблон не используется.

Ресурсы:

<Window.Resources>
    <DataTemplate x:Key="theBasicView">
        <controls:InfoDetailsControl InfoDetail="{Binding InfoDetails}" />
    </DataTemplate>

    <DataTemplate x:Key="theTableView">
        <telerik:RadGridView ItemsSource="{Binding DetailsTable}" />
    </DataTemplate>

    <analysis:DetailsTemplateSelector 
        BasicView="{StaticResource theBasicView}"
        TableView="{StaticResource theTableView}"
        x:Key="detailsTemplateSelector"
        />
</Window.Resources>

И селектор шаблона в вопросе:

<telerik:RadGridView.RowDetailsTemplate>
    <DataTemplate>
        <ItemsControl
               ItemTemplateSelector="{StaticResource detailsTemplateSelector}"
               />
    </DataTemplate>
</telerik:RadGridView.RowDetailsTemplate>

Если это BasicView, то DetailsTable должен быть нулевым. В противном случае это должен быть TableView. Вот мой DetailsTemplateSelector:

public class DetailsTemplateSelector : DataTemplateSelector
{
    public DataTemplate BasicView { get; set; }
    public DataTemplate TableView { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container) {
        FrameworkElement element = container as FrameworkElement;
        if (element != null && item != null && item is ViewableRuleResult)
        {
            ViewableRuleResult ruleResult = item as ViewableRuleResult;
            Window window = Application.Current.MainWindow;

            if (ruleResult.DetailsTable == null)
            {
                return BasicView;
            }
            else
            {
                return TableView;
            }             
        }
        return null;
    }
}

Ставить точку останова в SelectTemplate функция никогда не получает удар. Почему мой DetailsTemplateSelector никогда не вызывается? У меня такое ощущение, что селектор шаблонов в моем RowDetailsTemplate не прав. Дайте мне знать, если вам нужно больше деталей или что-то неясно.

Спасибо!

1 ответ

Решение

Починил это. Оказывается, у RadGridView есть свойство RowDetailsTemplateSelector, Используя следующий XAML:

<telerik:RadGridView x:Name="resultsgrid"
                                RowDetailsTemplateSelector="{StaticResource detailsTemplateSelector}"
                                ItemsSource="{Binding ViewableItems}"
                                AutoGenerateColumns="False"
                                Margin="0,0,0,30"
                                IsReadOnly="True"
                                >

И полностью удалив RowDetailsTemplate ранее определенный, теперь он функционирует должным образом.

Другие вопросы по тегам