在autogenerate = false时隐藏datagrid中的列

时间:2016-07-05 22:26:05

标签: wpf vb.net datagrid

我在codebehind中创建了这样的列。每列都绑定到一个属性。

Dim column_selected As New DataGridCheckBoxColumn()
column_selected.Header = "Selected"
column_selected.Binding = New Binding("IsChecked")
dgvResults.Columns.Add(column_selected)

我希望能够隐藏一个列,基于一个复选框或那种性质的东西,我可以随意隐藏/显示它们。

我已经听说过绑定属性布尔的可见性,但我不知道如何在代码后面创建列时这样做。

有关如何实现这一目标的任何想法?假设我想要一个隐藏特定列的复选框,如果您取消选中它,它会显示它。

2 个答案:

答案 0 :(得分:1)

您可以从代码隐藏中正常设置Binding,但由于System.Visibilty是枚举,您必须使用Converter(IValueConverter接口的实例)来正确设置Binding。有很多可能的实现,以下是一个例子:

public class BoolToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool? vis = value as bool?;
        return (vis.HasValue && vis.Value) ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

之后,您应该做的唯一事情是将Binding的Converter属性设置为BoolToVisibilityConverter的新实例,如下所示:

column_selected.Binding.Converter = new BoolToVisibilityConverter()

就是这样。

答案 1 :(得分:1)

如果设置列可见性的逻辑不包含任何业务逻辑,这是明确的UI操作。那么我认为你可以把它放在代码隐藏中,这有什么问题?

XAML

<CheckBox Checked="HideColumn" Unchecked="UnhideColumn"/>

代码隐藏

Protected Sub HideColumn()
    'your code
End Sub

Protected Sub UnhideColumn()
    'your code
End Sub