我有一个包含三列的Datagrid。
如果第一列的值不为空,我想要第二列只读
我尝试使用转换器,但是出了点问题。 有什么想法吗?
<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>
答案 0 :(得分:1)
如果查看输出日志,您很可能会注意到此错误:
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。
列定义不驻留在可视化树中,因此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>
或者使用模板列并定义自己的编辑模板(无论如何都会相似)。