0

我有一个三列的 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>
4

1 回答 1

1

如果您查看输出日志,您很可能会注意到此错误:

System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。

列定义不驻留在可视化树中,因此IsReadOnly属性不会绑定到任何数据上下文相关项。有关更深入的解释,请参阅此类似问题的答案。

您可以使用该解决方案,但也可以只设置编辑元素的样式:

<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>

或者使用模板列并定义您自己的编辑模板(无论如何都是相似的)。

于 2016-03-09T11:00:25.757 回答