2011-05-21 116 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

相关问题