我正在尝试从这里开始的例子
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 -Matti
答案 0 :(得分:3)
可以通过多种方式完成。一种方法是编辑Style for DataGrid的列标题。可以在以下位置找到列标题样式的示例:
Change WPF DataGrid Column Header Style, Menu Visibility in Code Behind?
不像上面的文章那样在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;
}
}
}
这可能不是最好的方法,但它确实有效。