如何实现xamcheckeditor禁用样式

时间:2012-10-15 19:32:10

标签: wpf infragistics xamdatagrid

将bool值绑定到xamdatagrid时,该列将自动使用xamcheckeditor显示数据。我想使用外部按钮来控制复选框列的允许值,当我更改allowedit属性时,列中的复选框将应用禁用/启用样式(变为灰色) 在我的资源字典中,我为xamcheckeditor编写了一个样式:

<ControlTemplate.Triggers>
    <Trigger Property="IsReadOnly" Value="True">
        <Setter TargetName="PART_FocusSite" Property ="IsEnabled" Value="False" />
     </Trigger>
</ControlTemplate.Triggers>

因此,当该字段不可编辑时,该复选框将显示为已禁用。

我还有一个按钮来控制列的允许值,当按钮单击时,它将调用:

grid.FieldsLayouts[0].Fields["Enabled"].Settings.AllowEdit = true/false

但启用/禁用操作未自动应用,我必须单击过滤器以刷新网格以使其应用...

请告知我应该如何实施,点击按钮设置允许的字段,复选框将自动启用。

谢谢!

Enzhou

1 个答案:

答案 0 :(得分:3)

如果你想要做的就是当它所属的字段将AllowEdit设置为false / true时禁用/启用XamCheckEditor,那么你需要做的就是创建一个带有直接连接到AllowEdit的绑定的样式。

<local:NullableBooleanConverter x:Key="converter"/>

<Style TargetType="{x:Type igEditors:XamCheckEditor}" >
    <Setter Property="IsEnabled" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type igDP:CellValuePresenter}},
        Path=Field.Settings.AllowEdit, Converter={StaticResource converter}}"/>
</Style>

由于XamCheckEditor位于Field的每个单元格内,这意味着它位于CellValuePresenter中。您可以使用RelativeSource绑定来访问它,然后访问它的属性。其中一个属性是它所属的领域。所以知道这一点,你可以直接绑定到AllowEdit。

现在AllowEdit是一个可以为空的布尔值(bool?),默认为null,因此您需要使用转换器来确保数据正确地传递给XamCheckEditor。

public class NullableBooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        // If value is null then we really mean true.
        if (value == null)
            return true;

        // value is not null so it's either true or false.
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

现在你需要做的只是设置你原来做的AllowEdit属性,它会自动更新XamCheckEditor。