【发布时间】:2016-04-15 14:55:47
【问题描述】:
基本上,我有一个带有几列的DataGrid,我想启用(更改IsReadOnly 属性)基于CheckBox IsChecked 的DataGridTextColumn,位于另一个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 来实现这一点,但我需要第一部分工作。
编辑:
回答一个好问题,我的目标是禁用相邻单元格(同一行),而不是整个列。
【问题讨论】:
-
您要禁用整列或相邻单元格??
-
好点。答案将是相邻的单元格。仔细想想,问题可能比我想象的要复杂。
-
最简单的解决方案是将 AutoScale 属性绑定到 Scale 列的单元格样式的 IsEnable 属性。请看我的回答,我已经给出了依赖于 UI 和依赖于数据的答案。
-
如果您想防止逐个单元格地进行编辑,您可能必须改为使用 DataGridTemplateColumn 并使用数据触发器来控制 CellEditTemplate 中显示的内容。
标签: c# wpf data-binding datagrid