2010-03-29 39 views
7

Tôi đang sử dụng Bộ công cụ WPF Datagrid và có một cột là một DataGridCheckBoxColumn ràng buộc với thuộc tính bool trên ViewModel của tôi.DataGridCheckBoxColumn ràng buộc ngay lập tức

Vấn đề của tôi là tôi không phải là tài sản để có được giá trị của nó được cập nhật ngay lập tức khi người dùng kiểm tra hoặc bỏ chọn hộp kiểm.

Bây giờ bạn phải điều hướng khỏi ô để cập nhật thuộc tính. Đó là một hộp kiểm. Không thể ở giữa chỉnh sửa như hộp văn bản có thể ...

Mọi trợ giúp sẽ được đánh giá cao.

/J

Trả lời

21

Bạn phải đặt thuộc tính UpdateSourceTrigger của liên kết thành PropertyChanged. Mặc định là LostFocus.

+0

này đã làm việc cho tôi. Cảm ơn. – alimbada

+0

Điều này làm việc cho tôi (WPF4) quá - có lẽ đây là một cái gì đó đã thay đổi cho .NET4 –

+0

Chắc chắn làm việc trong một cột templated –

9

Giải pháp là KHÔNG sử dụng DataGridCheckBoxColumn cho việc này. Thay vì sử dụng

<dg:DataGridTemplateColumn Width="20" Header="" SortMemberPath="IsSelected"> 
    <dg:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
     <CheckBox IsChecked="{Binding Path=IsSelected}" /> 
     </DataTemplate> 
    </dg:DataGridTemplateColumn.CellTemplate> 
</dg:DataGridTemplateColumn> 

mặc định là có UpdateSourcerigger của nó để PropertyChanged ...

DataGridCheckBoxColumn có nó UpdateSourceTrigger thiết lập để Explicit và nó không thể thay đổi. đọc thêm ở đây: http://blogs.msdn.com/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx

+4

Không, nó không mặc định. Bạn phải đặt thủ công, ví dụ: "UpdateSourceTrigger = PropertyChanged". Nếu không, bạn sẽ chỉ thực hiện thay đổi trực quan (VS2010). Dù sao, BIG THANK YOU để được giúp đỡ. – greenoldman

+0

lưu ý: bạn cần phải làm UpdateSourceTrigger ngay cả đối với một hộp văn bản bên trong một DataGrid. có lẽ muốn PropertyChanged = LostFocus trong trường hợp này (mặc dù đây là mặc định) –

+1

Tôi đã phải làm điều này khi sử dụng Silverlight 5 – Aducci

Các vấn đề liên quan