2010-03-25 84 views
3

由於某些原因,我無法隱藏WPF Toolkit的DataGridColumn。我試圖做到以下幾點:WPF通過綁定隱藏DataGridColumn

<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly}"> 
<dg:DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <TextBox Text="{Binding Path=ItemDescription}" /> 
    </DataTemplate> 
</dg:DataGridTemplateColumn.CellTemplate> 

這是不行的,因爲它在尋找的一個的ItemSource IsReadOnly屬性(不是當前類的屬性)。 如果將此添加爲實現INoifyPropertyChanged的ItemSource類的屬性,它仍然不會隱藏該列。有沒有解決的辦法?當按鈕單擊更改IsReadOnly屬性時,我希望列隱藏。

假設IsReadOnly返回能見度值,是一個依賴屬性

我完全卡住,我會很感激的幫助!非常感謝!

回答

5

如果你想綁定到DataGridColumnIsReadOnly財產,只需添加一個RelativeSource到綁定(及轉換器):

<BooleanToVisibilityConverter x:Key="boolToVis" /> 

... 

<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly, RelativeSource={RelativeSource Self}, Converter={StaticResource boolToVis}}"> 

此外,它看起來像this StackOverflow question可能與您的問題。

-1

你需要使用一個轉換器

Public Class BooleanToVisibilityConverter 
     Implements IValueConverter 
     Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert 
      If targetType Is GetType(Visibility) Then 
       If CBool(value) = True Then 
        Return Visibility.Hidden 
       Else 
        Return Visibility.Visible 
       End If 
      Else 
       Return Nothing 
      End If 
     End Function 

     Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack 
      Return Nothing 
     End Function 
    End Class 

然後使用該轉換器的XAML。 SAMPLE

+0

假設IsReadOnly已經返回一個可見性值,這不是我的問題,我的問題是,數據網格不想要尊重它 – 2010-03-25 19:27:23

+0

好的.silly問題。在你的VM屬性IsReadOnly你有你的二傳手OnPropertyChanged(「IsReadOnly」)?我知道有時候我會忘記這麼做,如果沒有它,用戶界面也不會作出反應。 – ecathell 2010-03-25 19:47:52

+2

BooleanToVisibilityConverter類已經存在於System.Windows.Controls中,不需要重新創建它;) – 2010-03-25 20:02:55

6

張貼在這個問題:

WPF DataGrid: Binding DataGridColumn visibility to ContextMenu MenuItems Ischeked (MVVM)

Fubzot使用類似於

Visibility='{Binding (FrameworkElement.DataContext).IsReadOnly, 
RelativeSource={x:Static RelativeSource.Self}}' 

你可能也想看看這個綁定代碼:

Forwarding the DataGrid’s DataContext to its’ columns..

這也是林在上面的問題ked。

只是爲了我的信息:您是否使用當前的代碼在輸出窗口中看到任何綁定錯誤?

+0

非常感謝,這與下面的答案非常相似。 我看到綁定錯誤,所以我知道我有問題:( – 2010-03-26 12:47:28

+0

很高興現在就開始工作。 – 2010-03-26 14:55:29