как реализовать стиль отключения xamcheckeditor

когда вы привязываете логическое значение к xamdatagrid, столбец будет автоматически использовать xamcheckeditor для отображения данных. Я хочу использовать внешнюю кнопку для управления разрешенным столбцом флажка, и когда я изменяю свойство allowit, флажок в столбце будет применять стиль отключения/включения (становится серым). В моем словаре ресурсов я пишу стиль для 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

Но действие включения/отключения не применяется автоматически, мне нужно щелкнуть фильтр, чтобы обновить сетку, чтобы применить их...

Пожалуйста, сообщите, что я должен сделать, чтобы реализовать после нажатия кнопки, чтобы установить разрешенное поле, флажки будут включены автоматически.

Спасибо!

Энчжоу


person enzhou.liu    schedule 15.10.2012    source источник


Ответы (1)


Если все, что вам нужно сделать, это отключить/включить 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 (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.

person rstoffers    schedule 26.10.2012