WPF 通过绑定隐藏 DataGridColumn

WPF Hide DataGridColumn via a binding

由于某种原因,我无法隐藏 WPF Toolkit 的 DataGridColumn。我正在尝试执行以下操作:

1
2
3
4
5
6
<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 返回一个可见性值并且是一个依赖属性

我完全被卡住了,非常感谢您的帮助!非常感谢!


发表于这个问题:

WPF DataGrid:将 DataGridColumn 可见性绑定到 ContextMenu MenuItems Ischeked (MVVM)

Fubzot 使用的绑定代码类似于

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

您可能还想看看这个:

将 DataGrida 的 DataContext 转发到它的?列..

这也链接在上面的问题中。

仅供参考:您是否在使用当前代码的输出窗口中看到任何绑定错误?


如果您想绑定到 DataGridColumn\\ 的 IsReadOnly 属性,只需将 RelativeSource 添加到 Binding(和转换器):

1
2
3
4
5
<BooleanToVisibilityConverter x:Key="boolToVis" />

...

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

此外,这个 StackOverflow 问题似乎与您的问题有关。


你需要使用转换器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 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 中使用转换器。样品