DataGridColumn只读转换器

时间:2016-03-09 10:34:58

标签: c# wpf datagrid converter datagridcolumn

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

1 个答案:

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

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