2012-05-18 2 views
13

Я использую DataGrid из инструментария WPF в .NET 3.5.DataGridCheckboxColumn двусторонняя привязка

У меня есть столбец datagrid, связанный с булевым свойством из моего исходного объекта.

Флажок вызывает свойства boolean, которые получают accessor правильно.

Однако при проверке или снятии флажка вызывается get вместо набора.

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Object, Source={StaticResource model}, Mode=TwoWay}"> 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Binding="{Binding BoolProperty, mode=TwoWay}"/>     
     </DataGrid.Columns> 
</DataGrid> 

Когда я вместо того, чтобы использовать DataGridTemplateColumn с Checkbox в нем свойство установлено правильно, однако тогда это гораздо сложнее, чтобы создать хороший макет.

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding BoolProperty, Mode=TwoWay}"/>        
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Что я делаю неправильно, используя DataGridCheckBoxColumn?

ответ

8

В DataGrid привязки не фиксируются, пока вы не закончите редактирование строки/ячейки. Если вы нажмете кнопку ввода, привязка вернется к источнику.

Использование такого шаблона переопределяет это поведение, но я бы не рекомендовал этого. Также не требуется установка TwoWay.

+0

Ok спасибо в этом случае поведение является необходимым, когда пользователь проверяет флажок Я хочу, чтобы визуально обновить что-то на экран. Есть ли способ сделать это с помощью DatGridCheckBoxColumn? Также, как наилучшим образом, чтобы при первом щелчке пользователю не нужно дважды щелкнуть, чтобы выбрать строку, а затем установить флажок, вы можете выбрать строку с событием mouseover? – DanBrum

+0

@ DanBrum: Я не знаю, можете ли вы обойти это, используя этот столбец, вы можете определить свой собственный DataGridCheckBoxColumn, если вы не найдете способ. Выбор в MouseOver должен быть возможен. –

37

меня такая же проблема с вами, вот мое решение

<CheckBox HorizontalAlignment="Center" IsChecked="{Binding BoolProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
+0

Спасибо, сэр, мне пришлось искать в Интернете какое-то время, прежде чем найти это решение. Прекрасно работает. – Mash

+2

'' 'TwoWay''' не требуется, поскольку он по умолчанию. – Den

31

Мое решение было установить UpdateSourceTrigger в PropertyChanged.

<DataGridCheckBoxColumn Header="Bool property" Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"></DataGridCheckBoxColumn> 
+3

Это лучший ответ. – pennyrave

+0

Это должен быть ответ – JobaDiniz

3

Мое решение было добавить ElementStyle с Style TargetType = «CheckBox»:

<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"> 
      <DataGridCheckBoxColumn.ElementStyle> 
       <Style TargetType="CheckBox"/> 
      </DataGridCheckBoxColumn.ElementStyle> 
</DataGridCheckBoxColumn> 
Смежные вопросы