我在codebehind中创建了这样的列。每列都绑定到一个属性。
Dim column_selected As New DataGridCheckBoxColumn()
column_selected.Header = "Selected"
column_selected.Binding = New Binding("IsChecked")
dgvResults.Columns.Add(column_selected)
我希望能够隐藏一个列,基于一个复选框或那种性质的东西,我可以随意隐藏/显示它们。
我已经听说过绑定属性布尔的可见性,但我不知道如何在代码后面创建列时这样做。
有关如何实现这一目标的任何想法?假设我想要一个隐藏特定列的复选框,如果您取消选中它,它会显示它。
答案 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