0

大量のデータを提示および修正するための WPF アプリケーションに取り組んでいます。外部サービスから取り込まれた 3 つの異なるソースからのデータを含むデータグリッドを実装しようとしています。まず、1 つのソース (マスター ソース) からのデータのみをグリッドに入力します。ただし、自動化されたバリデーターが 1 つのセルで検証の警告またはエラーをトリガーし、ユーザーが選択したセルの隣の列にある追加の 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 パターンを使用しようとしているので、これまでに DataGrid に ListCollectionView を設定しました。リストには、次のようなプロパティを持つアイテムが含まれています。

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

またはそれらを 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>
于 2012-04-05T17:26:06.217 に答える