2016-07-05 52 views
0

我在代碼隱藏中創建列,因此每列都綁定到一個屬性。當autogenerate = false時從datagrid隱藏列

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

我希望能夠隱藏列的基礎上,複選框或性質,在那裏我可以隱藏/隨意展示他們的東西。

我聽說過綁定可見性屬性布爾,但我不知道如何做到這一點時,在代碼後面創建列。

有關如何完成此任何想法?假設我想要一個隱藏特定列的複選框,如果您取消選中它,它會顯示它。

回答

1

如果設置列可見性的邏輯不包含任何業務邏輯,並且這是明確的UI操作。那麼我認爲你可以把它放在代碼隱藏的地方,那有什麼問題呢?

XAML

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

代碼隱藏

Protected Sub HideColumn() 
    'your code 
End Sub 

Protected Sub UnhideColumn() 
    'your code 
End Sub 
+0

我如何引用雖然不是索引綁定的名字嗎?他們可以移動列,這樣可能會很糟糕。 – TonyW

+0

您可以在運行時找到列索引'datagrid.Columns.ToList()。FindIndex(Function(column)column.Header.Equals(「YourHeader」))' – Fabio

1

您可以通常從代碼隱藏設置綁定,但由於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(); 
    } 
} 

之後,你應該做的唯一事情是設置綁定到的BoolToVisibilityConverter新實例如下的轉換特性:

column_selected.Binding.Converter = new BoolToVisibilityConverter() 

而就是這樣。