2012-04-05 14 views
0

大量のデータを表示および修正するためにWPFアプリケーションで作業しています。 Imは、外部サービスから実装された3つの異なるソースからのデータを含むデータグリッドを実装しようとしています。 まず、グリッドには1つのソース(マスターソース)からのデータが入力されます。 しかし、自動バリデーターが1つのセルで検証警告またはエラーを引き起こすことがあり、要件には、選択された2つのソースのデータを選択した列の隣にある列で表示できる必要があることが記載されています。このようなデータグリッド内の拡張可能な列

何か:

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

、その後、修正することができる:

Standard view: 

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

ユーザーは次回、このようなコラム「COL2 SRC1」に、ソース2及び3からのデータを表示したいです他の2つのソースからのデータでフォーマットされたセルに誤りがあり、列を再び折りたたむ。

これで、mvvmパターンを使用しようとしていますので、DataGridにはこれまでListCollectionViewを設定しています。私は、上記のようなものの2つの他のソースからのタイプのアイテムに2つの追加のコレクションを持っています

MyRowItem {string col1, string col2, string col3} 

: リストは、このような性質を持つアイテムが含まれています。

この機能を実装する方法はわかりませんし、ロジックに関するヘルプを使用することもできます。 私はどのようなアプローチをとるべきですか?

答えて

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}}"> 

または1列にそれらを置くのストリングス以上であることを作ると仮定しましょう:

<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

今のところ、私は答えに変更を加えました。なぜなら、DataGRidTextColumnの代わりにtemplate colを使用していたためです。 –

関連する問題