2012-04-05 66 views
0

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

事情是这样的:

Standard view: 

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

用户希望显示来自源2数据和第3列旁边的“COL2 SRC1”是这样的:

| 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个其他来源的额外集合。

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

回答

0

DataGrid的列具有可见性属性 - 通过绑定切换它。 使用您的ViewModel来确定何时进入准备显示列的状态 无论您的网格物品是什么, 假设的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> 
+0

首先,感谢您的回答。我想我已经掌握了解决方案背后的基本想法,但我无法一路搞清楚。有什么办法可以详细阐述一下吗? 此外,它似乎我不能使用 Jobe 2012-04-10 07:56:48

+1

我会在休息时添加一些编译和运行的东西。 – 2012-04-10 13:45:46

+0

现在,我做了一个更改的答案,原因绑定不起作用,因为我使用了一个模板col,而不是DataGRidTextColumn – 2012-04-10 15:27:16