形势:
我有一个DataGrid,其中的项目可以属于不同的类别,比如说A、B和自定义。每个类别都有自己的RowDetails模板。项目的类别可以更改,当发生这种情况时,如果需要的话,我也希望更改模板。后面的ViewModel是相同的,我只是更改接口元素(例如,在模板A中,我有一个TextBlock,而在模板B中,我有一个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 (红色边框,带有感叹号)。即使模板是空的,也会发生这种情况!在我看来,仅仅是改变模板就能让整件事爆发。
我做错了什么?谢谢!
发布于 2012-12-06 12:01:38
经过多次尝试和重试之后,我发现问题出现在模板内的ComboBox上:正如这里所说的,ComboBox属性的顺序很重要。把SelectedValue放在ItemsSource前面对我来说很有好处,而使用Triggers的方法也很有魅力。
尽管如此,我仍然对这样的解决方案感到震惊。我会把这个标记为答案,但我仍然愿意接受建议。
https://stackoverflow.com/questions/13681508
复制相似问题