0

からのデータをそのまま表示する必要があるという要件がありますDataTable。つまり、セルを編集する必要はありません。もう 1 つの要件はCombobox、各列のヘッダーとして表示する必要があることです。次に、最初の列は である必要がありcheckbox、どの行がグレー表示されるかを確認します。で実現可能だと思いましたDataGridが、方法が見つからないのでわかりません。

誰か助けてください。xaml.cs にコードを記述せずに、MVVM の方法で実行したいことに注意してください。

回答お待ちしております。

前もって感謝します。

編集:コードはそれほど多くはありませんが追加されました... .xaml

<DataGrid HorizontalAlignment="Left" Margin="0,274,0,0" VerticalAlignment="Top" Height="321" Width="981" AutoGenerateColumns="True" ItemsSource="{Binding Path=UploadedProductData, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}">
            <DataGrid.Columns>
                <DataGridTemplateColumn CanUserReorder="False" CanUserResize="False">
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="100"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

メインウィンドウのビューモデルで -

DataTable _uploadedProductData;
        public DataTable UploadedProductData
        {
            get { return _uploadedProductData; }
            set 
            {
                _uploadedProductData = value; 
            }
        }

上記が物件です。

xaml.cs で - 上記のプロパティを設定しました - いくつかのボタン イベントで

 ViewModel.UploadedProductData = dt;
4

1 に答える 1

0

要件で述べたことはすべて、WPF で完全に可能です。ほとんどのことは WPF で可能です。いくつかのコードを提供していただいたので、必要なインターフェースが不足していることがわかりINotifyPropertyChangedます...これに関するヘルプについては、リンクをクリックしてください。プロパティ値が変更された後に UI を更新するには、これを実装する必要があります...コード例を含めることが既に機能していることがわかりますか?

のセクションに表示される内容を定義するために を作成すること実際に可能です。を特定のデータの小さなビューと考えることができ、プロパティを使用して を設定することができます。DataTemplateHeaderDataGridDataTemplateDataTemplateHeaderDataGrid.RowHeaderTemplate

<DataGrid>
    <DataGrid.RowHeaderTemplate>
        <DataTemplate>
            <!--Define how you want the header to look here-->
        <DataTemplate>
    </DataGrid.RowHeaderTemplate>
</DataGrid>

さて、セルへのバインドに関しては、使用しているオブジェクトに大きく依存します。WPF では、データを正確に表すデータ型オブジェクトを作成するのが慣例です (必須ではありません)。あなたの場合、DataTableオブジェクトを使用するだけであると想定するので、重要なのは列名です。

DataGridTextColumnテキストの表示には列を使用するのが最適です。列ごとに異なるを使用する場合は、代わりに を使用することもできます。DataGridTextColumn.HeaderTemplateHeader

<DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Path=ColumnName0}">
        <DataGridTextColumn.HeaderTemplate>
            <ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="100"/>
        </DataGridTextColumn.HeaderTemplate>
    </DataGridTextColumn>
    <DataGridTextColumn Header="First Name" Binding="{Binding Path=ColumnName1}" />
    <DataGridTextColumn Header="Last Name" Binding="{Binding Path=ColumnName2}" />
</DataGrid.Columns>

ComboBox.ItemsSource次にアイテム コレクションにデータを追加する方法を尋ねられると思いますが、もう時間がありません。そのために、DataGridTemplateColumn の WPF ComboBox と別の ItemsSource投稿を紹介します。それで問題が解決しない場合は、インターネット検索でこの情報を簡単に見つけることができます。

于 2013-10-09T10:55:53.023 に答える