基本上,我有一个包含多个列的DataGrid
,并且我想基于同一IsReadOnly
的另一个DataGridTextColumn
中的CheckBox
IsChecked
启用(更改DataGridTemplateColumn
属性)一个DataGrid
>。
这是代码的(重要部分):
<DataGrid Name="lstTags" Grid.Row="0" ItemsSource="{Binding Path = LinesCollection}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" SelectionMode="Single" LostFocus="lstTags_LostFocus" SelectionChanged="lstTags_SelectionChanged">
<DataGrid.Columns>
<DataGridTemplateColumn x:Name="colAutoScale" Header="Auto Scale">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="ckbAutoScale" HorizontalAlignment="Center" IsChecked="{Binding AutoScale, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Scale" Binding="{Binding Path=Scale}" IsReadOnly="{Binding ElementName ckbAutoScale, Path=IsChecked}" Width="60" />
</DataGrid.Columns>
</DataGrid>
值得一提的是,我还想反转IsChecked属性的值,即
IsChecked = true
=> IsReadOnly = false
;IsChecked = false
=> IsReadOnly = true
。我可能会用一个简单的
Converter
来实现,但是我需要第一部分工作。编辑:
回答一个好问题,我的目标是禁用相邻的单元格(同一行),而不是整个列。
最佳答案
将以下绑定用于Scale
Column
:
<DataGridTextColumn Header="Scale" Binding="{Binding Path=Scale}" Width="60" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridCellsPanel}},Path=Children[0].Content.Content.AutoScale}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
或者简单地
<DataGridTextColumn Header="Scale" Binding="{Binding Path=Scale}" Width="60" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="IsEnabled" Value="{Binding Path=AutoScale}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
输出:
PS:以上解决方案1特定于您的代码,原因为
Auto Scale
column
为0 Index
这就是为什么我在Children[0]
中使用Binding
。如果有任何上下文需要,请更改。关于c# - 将DataGridTextColumn的IsReadOnly绑定(bind)到DataGridTemplateColumn复选框IsChecked,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36650502/