1

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

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

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

我还有一个按钮来控制列的 allowedit,当按钮被点击时,它将调用:

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

但是启用/禁用操作不会自动应用,我必须单击过滤器以刷新网格才能应用它们...

请告知我应该如何实施,一旦单击按钮设置提交的 allowedit,复选框将自动启用。

谢谢!

恩州

4

1 回答 1

3

如果您要做的只是在 XamCheckEditor 所属的字段将 AllowEdit 设置为 false/true 时禁用/启用它,那么您需要做的就是创建一个直接附加到 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 位于字段的每个单元格内,这意味着它位于 CellValuePresenter 内。您可以使用 RelativeSource 绑定来获取它,然后访问它的属性。它的属性之一是它所属的字段。所以知道这一点,您可以直接绑定到 AllowEdit。

现在 AllowEdit 是一个可以为 null 的布尔值(布尔值?),默认为 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。

于 2012-10-26T21:24:30.947 回答