基本上,我有一个包含多个列的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>


输出:

c# - 将DataGridTextColumn的IsReadOnly绑定(bind)到DataGridTemplateColumn复选框IsChecked-LMLPHP


  PS:以上解决方案1特定于您的代码,原因为Auto Scale
  column为0 Index这就是为什么我在Children[0]中使用
  Binding。如果有任何上下文需要,请更改。

关于c# - 将DataGridTextColumn的IsReadOnly绑定(bind)到DataGridTemplateColumn复选框IsChecked,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36650502/

10-12 22:46