RadGridViewを使用して、一連のアイテムをグリッドに表示しています。アイテムごとに、与えられたデータに基づいて2つの異なるテンプレートを切り替えたいと思います。1つは基本的にテキストブロックをポップする依存関係プロパティであり、もう1つはテーブルを表示するための別のRadGridViewです。
静的に配置すると、両方とも個別に機能しますが、これら2つの異なるテンプレートを動的に選択したいと思います。ただし、セレクターが呼び出されないため、テンプレートは使用されません。
資力:
<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はnullである必要があります。それ以外の場合は、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のテンプレートセレクターが正しくないように感じます。詳細が必要な場合や不明な点がある場合はお知らせください。
ありがとう!