【问题标题】:WPF Hide DataGridColumn via a bindingWPF 通过绑定隐藏 DataGridColumn
【发布时间】:2011-01-31 21:17:56
【问题描述】:

由于某种原因,我无法隐藏 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 值并且是一个依赖属性

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

【问题讨论】:

    标签: wpf binding wpfdatagrid


    【解决方案1】:

    发表于这个问题:

    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..

    上面的问题也有链接。

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

    【讨论】:

    • 非常感谢,这与下面的答案非常相似。我确实看到了绑定错误,所以我知道我遇到了问题:(
    【解决方案2】:

    如果您想绑定到DataGridColumnIsReadOnly 属性,只需将RelativeSource 添加到绑定(和转换器):

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

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

    【讨论】:

      【解决方案3】:

      你需要使用转换器

       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

      【讨论】:

      • 假设 IsReadOnly 已经返回可见性值,这不是我的问题,我的问题是数据网格不想尊重它
      • 好的..愚蠢的问题。在您的 VM 属性 IsReadOnly 上,您的设置器中有 OnPropertyChanged("IsReadOnly") 吗?我知道有时我会忘记这样做,没有它 UI 不会做出反应。
      • BooleanToVisibilityConverter 类已存在于 System.Windows.Controls 中,无需重新创建;)
      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 2017-02-07
      • 1970-01-01
      • 2014-03-31
      • 2017-08-15
      • 2015-12-30
      • 2010-10-27
      • 1970-01-01
      相关资源
      最近更新 更多