【问题标题】:change the datatemplate for the rowdetails of a datagrid based on row value根据行值更改数据网格的行详细信息的数据模板
【发布时间】:2013-04-21 23:48:33
【问题描述】:

我有一个使用 MVVM 原理的 wpf 应用程序。在这个应用程序中,我有一个数据网格,我希望根据绑定到数据网格行的对象中的基础属性的值,让每一行在 6 个可能的数据模板之一之间进行选择。

目标: 我不想使用后面的代码,并且想避免使用数据模板选择器。我想使用数据触发器从不同的数据模板中为每一行的 DetailsTemplate 进行选择。

尝试: 我尝试在 DataGrid 中定义一个数据触发器,如下所示,但它不起作用。

            <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”。

如果我从上面的数据网格定义中删除样式标记/内容,此错误就会消失。

谁能帮我根据该行中的属性值定义该行的数据模板。

提前谢谢你。

【问题讨论】:

    标签: .net wpf mvvm datagrid datatemplate


    【解决方案1】:

    你应该把Style放到&lt;DataGrid.Resources&gt;&lt;DataGrid&gt;下,而不是直接在&lt;DataGrid&gt;下。

    【讨论】:

    • 太棒了,将样式移到 datagrid.resources 中,一切都按我的意愿工作。非常感谢!
    • Stipo,当我在绑定到对象属性 tracking_action.chrCode 的组合框中选择不同的值时,数据模板不会更改,如上所示。你知道为什么吗?
    • 我不知道为什么它不起作用,你应该尝试调试它。试试这里的建议stackoverflow.com/questions/337023/…
    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 2011-03-06
    • 2016-11-24
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2018-03-23
    相关资源
    最近更新 更多