C# 基于复选框属性绑定DataGrid文本框启用
我有一个带有复选框和其他文本框的DataGridC# 基于复选框属性绑定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 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()
函数。