DataGridColumn Readonly 通过转换器
DataGridColumn Readonly via converter
我有一个包含三列的数据网格。
如果第一列的值不为空,我希望第二列只读
我尝试使用转换器,但出现问题。
任何想法为什么?
<UserControl.Resources
<Converters:StringToBoolConverter x:Key="stringToBoolConverter"/>
</UserControl.Resources>
.......................................
<DataGrid Grid.Column="2" Grid.RowSpan="2" HorizontalAlignment="Stretch" Name="_edgFAI" AddCommandVisibility="Visible" InternalCommandsHandling="False" DeleteCommandVisibility="Visible" SaveCommandVisibility="Visible">
<DataGrid.Columns>
<DataGridTextColumn Header="IdenFAI" Tag="ID_FAI" Width="Auto" IsReadOnly="True"/>
<DataGridTextColumn Header="Description" Tag="DS_FAI" Width="Auto" IsReadOnly="{Binding Path=ID_FAI, Converter={StaticResource stringToBoolConverter}}" />
<DataGridTextColumn Header="DocumentState" Tag="FAI_STATE" Width="SizeToHeader" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
如果您查看输出日志,您很可能会注意到此错误:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element.
列定义不在可视化树中,因此 IsReadOnly
属性 不绑定到任何数据上下文相关项。有关更深入的解释,请参阅此 similar question.
的答案
您可以使用该解决方案,但也可以只设置编辑元素的样式:
<DataGridTextColumn Header="Description" Binding="{Binding Name}">
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="IsReadOnly"
Value="{Binding Path=ID_FAI, Converter={StaticResource stringToBoolConverter}}" />
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
或者使用模板列并定义您自己的编辑模板(无论如何都会类似)。
我有一个包含三列的数据网格。
如果第一列的值不为空,我希望第二列只读
我尝试使用转换器,但出现问题。 任何想法为什么?
<UserControl.Resources
<Converters:StringToBoolConverter x:Key="stringToBoolConverter"/>
</UserControl.Resources>
.......................................
<DataGrid Grid.Column="2" Grid.RowSpan="2" HorizontalAlignment="Stretch" Name="_edgFAI" AddCommandVisibility="Visible" InternalCommandsHandling="False" DeleteCommandVisibility="Visible" SaveCommandVisibility="Visible">
<DataGrid.Columns>
<DataGridTextColumn Header="IdenFAI" Tag="ID_FAI" Width="Auto" IsReadOnly="True"/>
<DataGridTextColumn Header="Description" Tag="DS_FAI" Width="Auto" IsReadOnly="{Binding Path=ID_FAI, Converter={StaticResource stringToBoolConverter}}" />
<DataGridTextColumn Header="DocumentState" Tag="FAI_STATE" Width="SizeToHeader" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
如果您查看输出日志,您很可能会注意到此错误:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element.
列定义不在可视化树中,因此 IsReadOnly
属性 不绑定到任何数据上下文相关项。有关更深入的解释,请参阅此 similar question.
您可以使用该解决方案,但也可以只设置编辑元素的样式:
<DataGridTextColumn Header="Description" Binding="{Binding Name}">
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="IsReadOnly"
Value="{Binding Path=ID_FAI, Converter={StaticResource stringToBoolConverter}}" />
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
或者使用模板列并定义您自己的编辑模板(无论如何都会类似)。