数据网格中的可扩展列

时间:2012-04-05 12:31:13

标签: wpf c#-4.0 datagrid listcollectionview

我正致力于WPF应用程序,以呈现和更正大量数据。 我即将实现一个数据网格,其中包含从外部服务填充的3个不同来源的数据。 首先,我将仅使用来自一个源(主源)的数据填充网格。 但是,有时自动验证程序会在一个单元格上触发验证警告或错误,并且该要求指出用户应该能够查看所选单元素旁边的其他两个来源中的数据。

这样的事情:

Standard view:

| col1 src1 | col2 src1 | col3 src1 |
|           |           |           | 
|           |faulty     |           |
|           |           |           |

用户希望显示“col2 src1”列旁边的源2和3的数据,如下所示:

| col1 src1 | col2 src1 | col2 src2 | col2 src3 | col3 src1 |
|           |           |           |           |           |
|           |corrected  |           |           |           |
|           |           |           |           |           |

然后能够使用来自其他2个soruces的数据更正有故障的格式化单元格,然后再次折叠列。

我试图在这个上使用mvvm模式,所以到目前为止我已经使用ListCollectionView填充了DataGrid。 该列表包含具有以下属性的项目:

MyRowItem {string col1, string col2, string col3}

然后,我将有2个额外的集合,其中包含类似上面的类型,但来自其他2个来源。

我不知道如何实现此功能,并可以在逻辑上使用一些帮助。 我应该采取什么方法?

1 个答案:

答案 0 :(得分:0)

DataGrid的列具有属性Visibility - 通过绑定切换它。 使用ViewModel确定何时进入准备显示列的状态 无论你的GridSource是什么网格; 我们假设ObservableCollection, 使MyRowItem不仅仅是字符串

public class MyRowItem
{
     string ColumnDisplayValue {get;set;}
     bool IsVisible {get;set;}
}


<DataGrid ItemsSource="{Binding ViewModel.MyRowItems}">
    <DataGrid.Columns>
        <DataGridTextColumn
                Binding="{Binding ColumnDisplayValue }" 
                Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibility}}">

或将它们放在一列中:

<DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <TextBlock                 Width="33*" Text="{Binding crs1}" Visibility="{Binding IsSrc1Visible, Converter={StaticResource BoolToVisibility}}" />
                        <TextBlock Grid.Column="1" Width="33*" Text="{Binding crs2}" Visibility="{Binding IsSrc2Visible, Converter={StaticResource BoolToVisibility}}" />
                        <TextBlock Grid.Column="2" Width="33*" Text="{Binding crs3}" Visibility="{Binding IsSrc3Visible, Converter={StaticResource BoolToVisibility}}" />
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>