根据行值更改数据网格的rowdetails的datatemplate

时间:2013-04-28 04:16:22

标签: .net wpf mvvm datagrid datatemplate

我有一个使用MVVM原则的wpf应用程序。在这个应用程序中,我有一个datagrid,我想让每一行根据绑定到datagrid行的对象中的底层属性的值在6个可能的datatemplates中选择一个。

目标: 我不想使用后面的代码,并希望避免使用datatemplateselector。我想使用datatrigger为每行的DetailsTemplate选择不同的数据模板。

尝试: 我尝试在DataGrid中定义一个datatrigger,如下所示,但它不起作用。

            <DataGrid Grid.Column="1" Grid.Row="3" Grid.ColumnSpan="3" MinHeight="300"          
                    ItemsSource="{Binding TrackingCollection}"  
                    CanUserAddRows="False" CanUserDeleteRows="False"
                    SelectionMode="Single" SelectedItem="{Binding SelectedTracking, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                <Style TargetType="{x:Type DataGridRow}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="RC">
                            <!-- RECIEVING -->
                            <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingReceivingDetailTemplate}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="SH">
                            <!-- SHIPPING -->
                            <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingShippingDetailTemplate}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="ST">
                            <!-- STOCKING -->
                            <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingStockingDetailTemplate}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="OR">
                            <!-- ORDERING -->
                            <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingOrderingDetailTemplate}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="RT">
                            <!-- RETURNING -->
                            <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingReturningDetailTemplate}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding tracking_action.chrCode}" Value="TR">
                            <!-- TRANSFERING -->
                            <Setter Property="DetailsTemplate" Value="{StaticResource FTC_TrackingTransferingDetailTemplate}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
                <DataGrid.Columns>
                   ''column definitions go here
                </DataGrid.Columns>
            </DataGrid>

错误: 当我运行应用程序时,我收到以下错误:

  

'为类型集合添加值   'System.Windows.Controls.ItemCollection'引发了一个异常。线   数字'137'和行位置'35'。

如果从上面的datagrid定义中删除Style标记/内容,则此错误消失。

有人可以帮我根据该行中属性的值来定义行的datatemplate。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

您应该将Style放在<DataGrid.Resources>下的<DataGrid>下,而不是直接放在<DataGrid>下。