1

情况:

我有一个DataGrid项目可以属于不同类别的地方,比如ABCustom。每个类别都有自己的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(红色边框,带感叹号)。即使模板为空,也会发生这种情况!在我看来,只是更改模板会使整个事情爆炸。

我究竟做错了什么?谢谢!

4

1 回答 1

1

经过多次尝试和重试,我发现问题出在模板中的 ComboBox 上:如此处所述 ComboBox 属性中的顺序很重要。放在SelectedValue前面ItemsSource对我来说是诀窍,而使用Triggers作品的方法就像魅力一样。

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

于 2012-12-06T12:01:38.427 回答