0

3 つの列を持つ Datagrid があります。

最初の列の値がnullでない場合、2番目の列を読み取り専用にしたい

コンバーターで試してみましたが、何か問題があります。理由はありますか?

<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 に答える