C# 基于复选框属性绑定DataGrid文本框启用

C# 基于复选框属性绑定DataGrid文本框启用,c#,wpf,datagrid,textbox,C#,Wpf,Datagrid,Textbox,我有一个带有复选框和其他文本框的DataGrid <DataGrid AutoGenerateColumns="False" Height="170" Name="dataGrid1" Width="527" OpacityMask="#FF161A1A" BorderBrush="#FFB7B39D" Background="LightYellow" RowBackground="LightGray" AlternatingRowBackground="#FFFFFFF5" Bo

我有一个带有复选框和其他文本框的DataGrid

   <DataGrid AutoGenerateColumns="False" Height="170" Name="dataGrid1" Width="527"  OpacityMask="#FF161A1A" BorderBrush="#FFB7B39D" Background="LightYellow" RowBackground="LightGray" AlternatingRowBackground="#FFFFFFF5" BorderThickness="10" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserResizeColumns="True" CanUserSortColumns="False" FontFamily="Segoe UI" FontSize="13" CanUserAddRows="False">

       <DataGrid.Columns>
            <DataGridCheckBoxColumn Header="" Binding="{Binding BoolProperty, Mode=TwoWay}" />
            <DataGridTextColumn Header="" Binding="{Binding header}" MinWidth="108" IsReadOnly="True" />
            <DataGridTextColumn Header="Number of Cases" Binding="{Binding cases}" >
            <DataGridTextColumn.EditingElementStyle>
                  <Style TargetType="TextBox">
                        <Setter Property="IsEnabled" Value="{Binding Path=BoolProperty, Mode=TwoWay}" />
                 </Style>
           </DataGridTextColumn.EditingElementStyle>
          </DataGridTextColumn>


checkboxcolumn绑定到“BoolProperty”。如果BoolProperty为false,我希望文本框“案例数”被禁用,如果BoolProperty为true,则启用。我尝试在文本框中添加IsEnabled,但它不起作用。我哪里做错了

我在一个项目中使用了我的
DataGrid
LoadingRow
事件来检查特定状态。也许像这样的事情会有帮助:

void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
    checkRow(e.Row);
}

private void checkRow(DataGridRow dgRow)
{
    if (dgRow == null)
        return;

    var item = dgRow.Item as MyItemClass;
    if (item != null && item.BoolProperty)
    {
        ...
    }
    else
    {
        ...
    }
}
在您的情况下,您可以在if-else构造中启用/禁用单元格


希望能有所帮助。

对于仅使用XAML的方法,请使用模板列<代码>IsReadOnly。因为那个链接不提供实现,我会的

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=myProperty}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox IsEnabled="{Binding Path=myBool}" Text="{Binding Path=myProperty, Mode=TwoWay}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>


为什么要用编辑风格?马克,看了很多之后,我从这个网站的解决方案中得到了这个想法-这没有什么区别。无论是否选中该复选框,我都可以在“案例数”文本框中输入值@Tvd你是对的,更新了什么让我担心问这个问题,但是我应该在哪里添加这个代码?我的意思是它在TextBoxCol之间,或者在datacol之前,或者在哪里?我在这件事上效率不高。谢谢。
DataGridTemplateColumn
是它自己的列,就像
DataGridTextColumn
一样,它正在工作,但选中复选框后,我点击了3次文本框,然后就可以编辑它了。即使我取消选中复选框,我也可以编辑文本框。为什么会出现这种奇怪的行为?那么,如果用户当时选中/取消选中复选框,我认为LoadingRow事件将不会被执行!!!!没错,然后您可以将处理程序添加到
DataGrid
CellEditEnding
事件中,该事件也调用
checkRow()
函数。