【问题标题】:WPF DataGrid disable a row but allow one cellWPF DataGrid 禁用一行但允许一个单元格
【发布时间】:2019-05-31 09:41:16
【问题描述】:
我在 WPF 中有一个 DataGrid。
每行最左边的单元格是CheckBox,它在行的模型上设置Enabled 属性(通过RowViewModel)。
当 CheckBox 在某一行上未选中时,DataGrid 中的该行应该被禁用,因此该行其他列中的所有控件都应该被禁用,但不是 CheckBox 单元格。
我怎样才能最简单地实现这一点,仍然允许启用CheckBox 单元格,以便用户可以单击行中最左侧单元格中的CheckBox(因此用户仍然可以再次启用该对象,从而使也启用了完整的行)
【问题讨论】:
标签:
wpf
mvvm
datagrid
wpfdatagrid
【解决方案1】:
您可以使用绑定到CheckBox 的源属性的触发器定义单元格样式,并在源属性返回false 或true 时将单元格的IsEnabled 属性设置为false :
<Style x:Key="cellStyle" TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding Enabled}" Value="False">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
然后将除CheckBox 列之外的所有列的CellStyle 属性设置为这种样式:
<DataGridTextColumn ... CellStyle="{StaticResource cellStyle}">