WPF開発ノウハウ集

Xaml(DataGrid)の実装

基本

DataGrid1.jpg

<DataGrid ItemsSource="{Binding DataGrid1}">

列毎に表示するコントロールを制御する

DataGrid2.jpg

<Window.Resources>
    <CollectionViewSource x:Key="ComboBox1" Source="{Binding ComboBox1}"/>
</Window.Resources>

<DataGrid ItemsSource="{Binding DataGrid1}" 
         AutoGenerateColumns="False" CanUserAddRows="False">

    <DataGrid.Columns>

        <DataGridTemplateColumn Header="Label">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Label Content="{Binding LabelColumn}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        
        <DataGridTemplateColumn Header="TextBlock">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding TextBlockColumn}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="TextBox">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding TextBoxColumn}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="CheckBox">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding CheckBoxColumn}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="ComboBox">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding Source={StaticResource ComboBox1}}"
                             SelectedItem="{Binding ComboBoxColumn}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>

</DataGrid>

表示するコントロールを、表示時と編集時で切替える

選択中のセル以外は軽量なコントロール(TextBlock等)を表示して、重いコントロール(ComboBox等)はセルを選択した時に読み込むことで、DataGrid全体の読込速度を改善する

Triggerを使った実装例
Eventを使った実装例

(Bindingについては Binding(DataGrid)の実装 の項を参照)