DataGrid动态更改RowDetailsTemplate

时间:2012-12-03 10:39:33

标签: wpf templates datagrid

情况:

我有一个DataGrid,其中的项目可以属于不同的类别,例如 A B 自定义。每个类别都有自己的RowDetails模板。项目的类别可以更改,如果发生这种情况,我还想在必要时更改模板。后面的ViewModel是相同的,我只是更改了界面元素(例如,在模板AI中有TextBlock,而在模板BI中有TextBox,两者都有Binding到VM中的相同属性。

到目前为止我做了什么:

<DataGrid.RowDetailsTemplate>
    <DataTemplate>
        <Control x:Name="RowDetails" Focusable="False" />
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding TemplateID, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Value="0">
                    <Setter TargetName="RowDetails" Property="Template" Value="{StaticResource TemplateA}" />
            </DataTrigger>
            <DataTrigger Binding="{Binding TemplateID, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Value="1">
                <Setter TargetName="RowDetails" Property="Template" Value="{StaticResource TemplateB}" />
            </DataTrigger>
            <DataTrigger Binding="{Binding TemplateID, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Value="2">
                <Setter TargetName="RowDetails" Property="Template" Value="{StaticResource TemplateCustom}" />
            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>
</DataGrid.RowDetailsTemplate>

问题:

当我更改项目的类别时,我可以看到模板更改,但整行获取ValidationErrorTemplate(红色边框,带有感叹号)。即使模板为空,也会发生这种情况!在我看来,只是更改模板会让整个事情爆炸。

我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

经过大量的尝试和重试后,我发现问题出现在我的模板中的ComboBox上:如所述here所述,ComboBox属性中的顺序很重要。将SelectedValue放在ItemsSource之前为我做了诀窍,使用Triggers的方法就像魅力一样。

然而,我仍然对这种解决方案感到震惊。我会将此标记为答案,但我仍然愿意接受建议。

相关问题