2012-05-18 12 views
13

Używam DataGrid z zestawu narzędzi WPF w .NET 3.5.DataGridCheckboxColumn dwukierunkowe wiązanie

Mam kolumnę datagrid związaną z właściwością boolean z mojego obiektu źródłowego.

To pole wyboru wywołuje właściwości boolowskie, aby uzyskać poprawny akcesor.

Jednak podczas zaznaczania lub odznaczania pola wywoływane jest polecenie get zamiast zestawu.

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

Kiedy zamiast użyć DataGridTemplateColumn z wyboru w niej właściwość jest ustawiona poprawnie jednak to jest bardziej skomplikowane, aby stworzyć piękny wygląd.

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

Co robię źle przy użyciu DataGridCheckBoxColumn?

Odpowiedz

8

W przypadku połączeń DataGrid wiązania nie zostaną zatwierdzone, dopóki nie zakończy się edycja wiersza/komórki. Jeśli naciśniesz enter, powiązanie zostanie zastosowane z powrotem do źródła.

Użycie tego szablonu zastępuje to zachowanie, ale nie polecam tego. Również ustawienie TwoWay jawnie nie powinno być konieczne.

+0

Ok dzięki w tym przypadku zachowanie jest konieczne, ponieważ gdy użytkownik sprawdza pole Chcę naocznie zaktualizować coś na ekran. Czy jest sposób to zrobić przy użyciu DatGridCheckBoxColumn? Również, co jest najlepszym sposobem, aby na głównym kliknięciu użytkownik nie musi kliknąć dwa razy, aby wybrać wiersz, a następnie pole wyboru, czy można wybrać wiersz z wydarzeniem mouseover? – DanBrum

+0

@DanBrum: Nie wiem, czy można tego uniknąć za pomocą tej kolumny, można zdefiniować własne DataGridCheckBoxColumn, jeśli nie można znaleźć sposób. Wybór na MouseOver powinien być możliwy. –

37

mam ten sam problem z wami, tu jest moje rozwiązanie

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

Dziękuję, proszę pana, musiałem przeszukać internet przez chwilę, zanim znalazłem to rozwiązanie. Działa świetnie. – Mash

+2

'' 'TwoWay''' nie jest konieczne, ponieważ jest domyślne. – Den

31

Moje rozwiązanie było ustawić UpdateSourceTrigger do PropertyChanged.

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

To jest najlepsza odpowiedź. – pennyrave

+0

to powinna być odpowiedź – JobaDiniz

3

Moje rozwiązanie było dodać ElementStyle ze stylem TargetType = „checkbox”:

<DataGridCheckBoxColumn Binding="{Binding BoolProperty, UpdateSourceTrigger=PropertyChanged}"> 
      <DataGridCheckBoxColumn.ElementStyle> 
       <Style TargetType="CheckBox"/> 
      </DataGridCheckBoxColumn.ElementStyle> 
</DataGridCheckBoxColumn> 
Powiązane problemy