1

データグリッドに項目ソースを動的に追加しています:

datagrid.ItemsSource = _table.DefaultView;
            foreach (DataColumn column in _table.Columns)
            {
                if (column.DataType == typeof(bool))
                {
                    var dgrcl = new DataGridCheckBoxColumn
                        {
                            IsThreeState = false,
                            Header = column.Caption,
                            Binding = new Binding(column.ColumnName),
                            Width = new DataGridLength(15, DataGridLengthUnitType.Star)
                        };
                    datagrid.Columns.Add(dgrcl);
                }
                else
                {
                    var dgrcl = new DataGridTextColumn();
                    dgrcl.Binding = new Binding(column.ColumnName);
                    dgrcl.Header = column.Caption;
                    datagrid.Columns.Add(dgrcl);
                }
            }

しかし、(checkboxcolumn を使用して) Datagrid に新しい行を追加すると、チェックボックスは 3 つの状態になります。xamlに次のコードを追加しようとしました:

<Style TargetType="CheckBox" x:Key="dgrChkBoxStyle">
            <Setter Property="IsThreeState" Value="False"></Setter>
            <Setter Property="IsChecked" Value="True"></Setter>
        </Style>   
<DataGrid Name="datagrid" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="10" VerticalAlignment="Stretch" AlternatingRowBackground="Honeydew" AlternationCount="2" AutoGenerateColumns="False">
            <DataGridCheckBoxColumn>
                <DataGridCheckBoxColumn.ElementStyle>
                    <Style TargetType="CheckBox" BasedOn="{StaticResource dgrChkBoxStyle}"></Style>
                </DataGridCheckBoxColumn.ElementStyle>
            </DataGridCheckBoxColumn>
        </DataGrid>

ただし、「ItemsSource を使用する前に、Items コレクションを空にする必要がある」という例外があります。

私はWPFが初めてですが、2つの状態だけでチェックボックスを作成する方法を教えてください。

4

2 に答える 2

0

に直接アクセスできますDataGridCheckBoxColumn。どうですか?

<Style x:Key="DgCheckBoxColumnStyle" x:TargetType="{x:Type DataGridCheckBoxColumn}">
    <Setter Property="IsThreeState" Value="False" />
    <Setter Property="Binding" Value="{Binding <SomePath>, TargetNullValue="True"}" />
</Style>

<DataGridCheckBoxColumn Style="{StaticResource DgCheckBoxColumnStyle}" />

詳細については、msdnを参照してください。あなたがそれを達成しようとしている方法よりも簡単なはずです。

列のコントロールに本当にアクセスしたい場合は、 DataGridBoundColumn.ElementStyleとDataGridBoundColumn.EditingElementStyleに 1 つのスタイルを提供する必要があります

于 2013-04-23T10:11:20.813 に答える
0

次のように列定義を記述する必要があります。

  <DataGrid Name="datagrid" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="10" VerticalAlignment="Stretch" AlternatingRowBackground="Honeydew" AlternationCount="2" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridCheckBoxColumn>
                <DataGridCheckBoxColumn.ElementStyle>
                    <Style TargetType="CheckBox" BasedOn="{StaticResource dgrChkBoxStyle}"></Style>
                </DataGridCheckBoxColumn.ElementStyle>
            </DataGridCheckBoxColumn>
        </DataGrid.Columns>
    </DataGrid>
于 2013-04-23T09:57:19.180 に答える