情况:
我有一个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(红色边框,带有感叹号)。即使模板为空,也会发生这种情况!在我看来,只是更改模板会让整个事情爆炸。
我做错了什么?谢谢!
答案 0 :(得分:1)
经过大量的尝试和重试后,我发现问题出现在我的模板中的ComboBox上:如所述here所述,ComboBox属性中的顺序很重要。将SelectedValue
放在ItemsSource
之前为我做了诀窍,使用Triggers
的方法就像魅力一样。
然而,我仍然对这种解决方案感到震惊。我会将此标记为答案,但我仍然愿意接受建议。