WPF通过绑定隐藏DataGridColumn

时间:2010-03-25 18:56:32

标签: wpf binding wpfdatagrid

出于某种原因,我无法隐藏WPF Toolkit的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值并且是依赖属性

我完全陷入困境,我真的很感激帮助!非常感谢!

3 个答案:

答案 0 :(得分:6)

发表在这个问题:

WPF DataGrid: Binding DataGridColumn visibility to ContextMenu MenuItems Ischeked (MVVM)

Fubzot正在使用类似于

的绑定代码
Visibility='{Binding (FrameworkElement.DataContext).IsReadOnly,
RelativeSource={x:Static RelativeSource.Self}}'

您可能还想看看这个:

Forwarding the DataGrid’s DataContext to its’ columns..

也与上述问题有关。

仅供我参考:您是否使用当前代码在“输出”窗口中看到任何Binding错误?

答案 1 :(得分:5)

如果要绑定到DataGridColumn的{​​{1}}属性,只需在绑定(和转换器)中添加IsReadOnly

RelativeSource

此外,看起来this StackOverflow question可能与您的问题有关。

答案 2 :(得分:-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中使用转换器。 SAMPLE