在定义并与 CollectionView 绑定时,是否可以隐藏 WPF 数据网格中的列

本文关键字:数据 WPF 隐藏 数据网 网格 定义 CollectionView 绑定 是否 定时 | 更新日期: 2023-09-27 18:34:10

>我正在尝试从这里举例

http://msdn.microsoft.com/en-us/library/ff407126

我想添加一个控件,用户可以定义哪些列可见。这很容易做到吗?

我找到了 http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/但它是不同的,因为它没有使用CollectionView和CollectionViewSource。

谢谢 & BR -马蒂

在定义并与 CollectionView 绑定时,是否可以隐藏 WPF 数据网格中的列

它可以通过多种方式完成。一种方法是编辑 DataGrid 列标题的样式。列标题样式的示例可以在以下位置找到:

更改 WPF 数据网格列标题样式、代码隐藏中的菜单可见性?

而不是像上面的文章中那样在 ControlTemplate 中使用菜单,可以像下面这样为列标题提供一个按钮:

<Button Grid.Column="2" Name="MultiButton" MouseRightButtonDown="MultiButton_MouseRightButtonDown" Click="MultiButton_Click" Visibility="Hidden">X</Button>
按钮

使用第二个鼠标按钮打开弹出菜单,然后单击应该删除该列。默认情况下,该按钮是隐藏的,因此当鼠标移动到列标题时,必须有触发器才能使按钮可见:

<Trigger Property="IsMouseOver" Value="True" >
    <Setter Property="Visibility" TargetName="DeleteColumn" Value="Visible" />                            
</Trigger>

因为所有列都有按钮,所以 click 事件必须整理出要隐藏的列:

private void MultiButton_Click(object sender, RoutedEventArgs e)
{
   object dataContext = ((FrameworkElement)sender).DataContext;
   foreach (DataGridColumn col in dataGrid1.Columns)
   {
       if (col.Header.ToString() == dataContext.ToString())
       {
           col.Visibility = Visibility.Hidden;
       }
   }
}

这可能不是最好的方法,但它有效。