0

私の DataGrid には、ヘッダーにチェックボックスがある textcolumn があります。

   <DataGridTextColumn Binding="{Binding Path=value1}" >
       <DataGridTextColumn.Header>                                       
            <Grid>
                <Grid.ColumnDefinitions>
                      <ColumnDefinition/>
                      <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="1" Text="Value1" IsEnabled="{Binding Value1Checked}" />
                <CheckBox Name="chkValue1" Grid.Column="0" Width="16" IsChecked="{Binding Path=Value1Checked, Mode=TwoWay}"  />
           </Grid>
      </DataGridTextColumn.Header>                                    
   </DataGridTextColumn>

チェックボックスの値をテキストボックスにバインドしたい - チェックボックスが選択されている場合、ユーザーのみがテキストボックスに値を入力できます。私のコードビハインドには次のものがあります:

public bool Value1Checked { get; set; }

// In constructor
Value1Checked = false; 

現在、IsEnabled 値にはプロパティ Value1Cheched、つまり false があるため、アプリは行の TExtBox にテキストを入力することを許可すべきではないと考えています。ユーザーが Value1 チェックボックスをクリックしない限り、ユーザーはそれを追加できません。しかし、上記のコードは何の影響もありません。ユーザーは、チェック ボックスの値に関係なく、テキスト ブロックに値を入力できます。

どこが間違っていますか??

追加情報 ヘッダーにはチェックボックスとテキスト「Value1」が含まれています。そして、ヘッダーでクリックされたチェックボックスに基づいて、ユーザーが値を入力できるように/できないようにしたいと考えています。

ガイドラインやヘルプをお願いします。

ありがとう

更新された XML コード

                        <DataGridTemplateColumn>
                            <DataGridTemplateColumn.Header>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Column="1" Text="TValue1" IsEnabled="{Binding ElementName=chkValue1, Path=IsChecked}" />
                                    <CheckBox Name="chkValue1" Grid.Column="0" Width="16" />
                                </Grid>
                            </DataGridTemplateColumn.Header>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=Value1Checked}" />
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                            <DataGridTemplateColumn.CellEditingTemplate>
                         <DataTemplate>
                             <TextBox IsEnabled="{Binding ElementName=chkValue1, Path=IsChecked}" Text="{Binding Path=value1, Mode=TwoWay}" />
                         </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
               </DataGridTemplateColumn>

           </DataGrid.Columns>
       </DataGrid>

これにより、チェックボックスをオンにすると、各行のその列に値を入力することしかできなくなります。しかし、デフォルトでは、各行の列の値は「FALSE」です。テキストを入力すると(int)「23」と入力され、フォーカスが失われると再び「FALSE」のみが表示されます。それでも何がうまくいかないのですか??

4

2 に答える 2

1

これはあなたが望むものかもしれません。列のすべての行を入力できるかどうかを切り替える上部のチェックボックス。残念ながらにバインドできないため、 を使用する必要がありますDatagridTextColumnが、最終結果は同じですIsReadOnlyDataGridTemplateColumn

<DataGridTemplateColumn>
    <DataGridTemplateColumn.Header>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="1" Text="Value1" IsEnabled="{Binding ElementName=chkValue1, Path=IsChecked}" />
            <CheckBox Name="chkValue1" Grid.Column="0" Width="16" />
        </Grid>
    </DataGridTemplateColumn.Header>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=myProperty}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <TextBox IsEnabled="{Binding ElementName=chkValue1, Path=IsChecked}" Text="{Binding Path=myProperty, Mode=TwoWay}" />
            </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
于 2013-08-27T18:45:59.257 に答える
0

IsReadOnlya のプロパティをプロパティにTextBoxバインドするのはどうですかCheckbox.IsChecked?:

<DataGridTextColumn Binding="{Binding Path=value1}" >
    <DataGridTextColumn.Header>                                       
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <TextBox Grid.Column="1" Text="{Binding}" IsReadOnly="{Binding IsChecked, 
ElementName=chkValue}" />
            <CheckBox Name="chkValue1"  Grid.Column="0" Width="16" IsChecked="{Binding 
RelativeSource={RelativeSource AncestorType={x:Type DataGridColumn}}, Path=
DataContext.AllItemsAreChecked}" />
        </Grid>
    </DataGridTextColumn.Header>                                    
</DataGridTextColumn>
于 2013-08-27T14:50:34.047 に答える