2012-04-05 3 views
0

Im работает над WPF-приложениями для представления и исправления больших объемов данных. Я собираюсь реализовать datagrid, содержащий данные из трех разных источников, которые заполняются из внешних служб. Для начала я заполню сетью только данные из одного источника, основного источника. Однако иногда автоматический валидатор инициирует предупреждение или ошибку проверки на одной ячейке, и в требовании указывается, что пользователь должен иметь возможность просматривать данные из дополнительных 2 источников в столбцах рядом с выбранным.Расширяемые столбцы в datagrid

Что-то вроде этого:

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 сбоев, а затем снова свернуть столбцы.

Я пытаюсь использовать шаблон mvvm на этом, так что я до сих пор заполнял DataGrid с помощью ListCollectionView. Список содержит элементы со свойствами, как это:

MyRowItem {string col1, string col2, string col3} 

I будет иметь 2 дополнительные коллекции с элементами типа, как описано выше, но с 2-х других источников.

Я понятия не имею, как реализовать эту функцию и использовать некоторую помощь по логике. Какой подход я должен возглавить?

ответ

0

Столбцы DataGrid имеют свойство Видимость - переключать ее через привязку. Используйте 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> 
+0

Прежде всего, спасибо за ваш ответ. Я думаю, что у меня есть основная идея вашего решения, я просто не могу разобраться в этом. Есть ли способ, который вы можете немного придумать? Кроме того, кажется, я не могу использовать Jobe

+1

Я добавлю что-то, что компилируется и работает сегодня, когда у меня есть перерыв. –

+0

на данный момент я внес изменения в ответ, причина, по которой связь не работала, была связана с тем, что я использовал шаблон col, а не DataGRidTextColumn –

Смежные вопросы