0

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

像这样的东西:

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 个源的数据更正错误的格式化单元格,然后再次折叠列。

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

MyRowItem {string col1, string col2, string col3}

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

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

4

1 回答 1

0

DataGrid 的列有一个属性 Visibility - 通过绑定切换它。使用您的 ViewModel 确定您何时进入准备显示列的状态,无论您的 ItemsSource 用于网格;让我们假设 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>
于 2012-04-05T17:26:06.217 回答