基于复选框属性启用绑定数据网格文本框
本文关键字:数据网 网格 文本 数据 绑定 复选框 属性 启用 | 更新日期: 2023-09-27 18:28:59
我有一个带有复选框的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,我希望文本框"Number of Cases"被禁用,如果BoolProperties为true,我希望它被启用。我尝试在TExtBox中添加IsEnabled,但它不起作用。我哪里错了?
对于仅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>
我在一个项目中使用了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控件中启用/禁用您的单元格。
希望能有所帮助。