我正在使用 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 应为 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 中的模板选择器不正确。如果您需要更多细节或不清楚的地方,请告诉我。

谢谢!

最佳答案

解决它。原来 RadGridView 有一个属性 RowDetailsTemplateSelector 。使用以下 XAML:

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

并完全删除之前定义的 RowDetailsTemplate,它现在可以正常运行。

关于c# - RadGridView 模板选择器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12749662/

10-12 00:11
查看更多