Пользовательский CheckBox в WPF DataGrid не обновляет привязку

У меня есть следующий (упрощенный) стиль:

<Style x:Key="MyStyle" TargetType="{x:Type CheckBox}">  
    <Setter Property="Background" Value="Blue" />  
</Style>

Если я использую его в качестве ElementStyle И EditingElementStyle в моем DataGridCheckBoxColumn:

<DataGridCheckBoxColumn Binding="{Binding IsEnabled}"  
                        ElementStyle="{StaticResource MyStyle}"  
                        EditingElementStyle="{StaticResource MyStyle}" />

Затем моя привязка, IsEnabled, не переключается, когда я проверил/снял флажок флажок строки. Если я удаляю или ElementStyle, EditingElementStyle или обоих, то обязательные обновления без проблем. Почему это?!

Кроме того, я пытался работать вокруг проблемы с помощью следующего кода:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding IsEnabled}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Однако проблема остается.

8
задан Yael 28 January 2017 в 08:58
поделиться

1 ответ

Прежде всего, ваше утверждение, что если вы удалите ElementStyle или EditingElementStyle решает проблему, неверно, что вас беспокоит, так это ElementStyle .

Дело в том, что для выполнения редактирования сетка данных должна переключиться на шаблон редактирования, что обычно происходит по щелчку мыши, однако, поскольку CheckBox обрабатывает событие щелчка мыши, сетка данных никогда не получает их и никогда не переходит в режим редактирования, предотвращая попадание ваших изменений в объекты данных (они остаются в представлении данных, но не передаются в исходные данные).

Теперь вы можете спросить, почему поведение по умолчанию в порядке? Что ж, если вы посмотрите на значение по умолчанию для свойства ElementStyle , вы заметите, что оно устанавливает для IsHitTestVisible и Focusable значение false. Это предотвращает CheckBox от обработки щелчка мыши (или события клавиатуры), который изменяет его состояние, и позволяет сетке данных получать их, тем самым давая возможность перейти в режим редактирования и переключиться на EditingElementStyle , который не влияет на фокусируемость и тестируемость попаданий.

Пример того, как это сделать, можно найти в этой записи блога Когда CheckBox только для чтения WPF DataGrid не доступен только для чтения?

11
ответ дан 5 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: