3

何らかの理由で、WPFツールキットのDataGridColumnを非表示にできません。私は次のことをしようとしています:

<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly}">
<dg:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBox Text="{Binding Path=ItemDescription}" />
    </DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>

ItemSourceでIsReadOnlyプロパティ(現在のクラスのプロパティではない)を探しているため、これは機能しません。これをINoifyPropertyChangedを実装するItemSourceクラスのプロパティとして追加しても、列は非表示になりません。これを回避する方法はありますか?ボタンのクリックでIsReadOnlyプロパティが変更されたときに列を非表示にします。

IsReadOnlyがVisibility値を返し、依存関係プロパティであると想定します

私は完全に立ち往生しています、私は本当に助けていただければ幸いです!どうもありがとう!

4

3 に答える 3

6

この質問に投稿:

WPF DataGrid: DataGridColumn の可視性を ContextMenu MenuItems Ischeked にバインドする (MVVM)

Fubzot は次のようなバインディング コードを使用しています。

Visibility='{Binding (FrameworkElement.DataContext).IsReadOnly,
RelativeSource={x:Static RelativeSource.Self}}'

これをチェックすることもできます:

DataGrid の DataContext をその列に転送する..

上記の質問にもリンクされています。

参考までに: 現在のコードを使用して、出力ウィンドウにバインディング エラーが表示されますか?

于 2010-03-25T20:43:48.477 に答える
5

DataGridColumnのプロパティにバインドする場合は、バインディング(およびコンバーター)にをIsReadOnly追加するだけです。RelativeSource

<BooleanToVisibilityConverter x:Key="boolToVis" />

...

<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly, RelativeSource={RelativeSource Self}, Converter={StaticResource boolToVis}}">

また、このStackOverflowの質問は問題に関連している可能性があります。

于 2010-03-25T20:21:10.123 に答える
-1

コンバーターを使用する必要があります

 Public Class BooleanToVisibilityConverter
        Implements IValueConverter
        Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
            If targetType Is GetType(Visibility) Then
                If CBool(value) = True Then
                    Return Visibility.Hidden
                Else
                    Return Visibility.Visible
                End If
            Else
                Return Nothing
            End If
        End Function

        Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
            Return Nothing
        End Function
    End Class

次に、XAML でコンバーターを使用します。サンプル

于 2010-03-25T19:16:07.877 に答える