2011-05-21 117 views
1

我有一個DataGrid的DataGridCheckBoxColumn綁定到可爲空的布爾值。如果值爲null,我想完全隱藏複選框。我嘗試了以下觸發器,但它不起作用:WPF DataGridCheckBoxColumn:如果綁定值爲null,如何隱藏複選框?

<Style TargetType="CheckBox"> 
    <Style.Triggers> 
     <Trigger Property="IsChecked" Value="{x:Null}"> 
      <Setter Property="Visibility" Value="Hidden"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

是否有可能?非常感謝您的幫助!

回答

2

總是有一個DataGrid兩種風格,在ElementStyleEditingElementStyle,你的風格應作爲ElementStyle,那麼你仍然可以編輯該複選框,但它是不可見的,當沒有在編輯模式下,如果空。這三個州也需要啓用。

<DataGridCheckBoxColumn Binding="{Binding MyNullableBool}" IsThreeState="True"> 
    <DataGridCheckBoxColumn.ElementStyle> 
     <Style TargetType="CheckBox"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="{x:Null}"> 
        <Setter Property="Visibility" Value="Hidden"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGridCheckBoxColumn.ElementStyle> 
</DataGridCheckBoxColumn> 
+0

+1。這是正確的答案,但是如果你不添加IsThreeState =「True」,假設用戶希望只使用網格中沒有綁定爲null的複選框,它會更好。 – RichardOD 2011-05-21 18:20:49

+0

它對我有部分作用。如果爲null,它將隱藏複選框。但是,我也觀察到以下問題:1.我的列只能讀取。但是,在應用此樣式之後,該複選框不再是隻讀的。實際上,我的綁定屬性只是一個getter,所以我不確定checkable狀態是如何綁定的。 2.該複選框現在左對齊。它曾經居中。 3.我怎樣才能使這個可重用的風格?我有很多這樣的專欄,我不想爲每一欄重複同樣的事情。 4.我沒有看到設置或不設置IsThreeState = True的任何區別。 – newman 2011-05-21 19:14:51

+1

您可以將樣式定義爲資源(​​'DataGrid.Resources'),然後引用它:'',其中'myStyle'是分配給'x:Key'樣式。還要在綁定中設置Mode = OneWay,它不應該是可編輯的(我甚至有一個異常,當我移除setter時,這個異常迫使我這樣做)。 – 2011-05-21 19:17:55

相關問題