Селектор шаблонов 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
ранее определенный, теперь он функционирует должным образом.