C# WPF将DataGridTExtCol与其标头cheeckbox绑定

C# WPF将DataGridTExtCol与其标头cheeckbox绑定,c#,wpf,binding,checkbox,textbox,C#,Wpf,Binding,Checkbox,Textbox,在我的DataGrid中,我有一个textcolumn,其标题中有一个复选框 <DataGridTextColumn Binding="{Binding Path=value1}" > <DataGridTextColumn.Header> <Grid> <Grid.ColumnDefinitions&

在我的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>
现在,我认为应用程序不应该允许在行的文本框中输入文本,因为其IsEnabled值已检查属性值1,即false。除非用户单击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”,当我输入text时,我输入(int)“23”,在焦点丢失时,它再次仅显示“FALSE”。还是出了什么问题?

如何将
文本框的
IsReadOnly
属性绑定到
复选框。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>

这可能是您想要的。顶部的复选框,用于切换是否可以键入所有列的行。不幸的是,
DatagridTextColumn
IsReadOnly
无法绑定,因此您必须使用
DataGridTemplateColumn
,但最终结果是相同的

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


哦,对不起。此更改影响的是标题部分,而不是DataGrid行中的实际文本框。为此,我在“”上尝试了相同的方法,但没有任何区别。当我从文本框中移动焦点时,它会抛出“无效操作异常”双向绑定所需路径或XPath。我在SampleData中添加了“Value1Changed”,但在该列的行中,我只能输入bool值,而不能输入int。我在“中”添加了上面的xml代码更新的代码“@TvdText=“{Binding Path=Value1Checked}”为您的TextBlock应该是Text=“{Binding Path=value1}噢,吉姆,非常感谢。这终于奏效了。吉姆现在也帮我排好队。对于上述同一个网格,我在第一个网格上有一个复选框col,如果单击该复选框,则只允许用户输入该行的其他col。我也需要这个选择。您提供的解决方案不起作用,因此。这一点也请帮助我。@Tvd您应该用更新的解决方案提出一个新问题,并询问您关于在列启用之上启用行的新要求。
<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>