WPF数据表格 - 当复选框列的值更改时立即提交更改

12

我有一个小问题,涉及到数据网格。

我的网格中有一个复选框列,这是唯一可编辑的列。

我想要实现的行为是,当复选框状态改变时,数据网格会立即更新其数据源。用户勾选/取消勾选该框 > 底层数据表得到更新。

默认情况下,似乎在行失去焦点时才会更新源,需要用户按键或单击其他控件来保存更改。
我该如何更改这个行为?

我没有看到可以做到这一点的数据网格属性,也没有DataGridCheckBoxColumn的CheckChanged事件。

2个回答

18

您需要在列的绑定上使用UpdateSourceTrigger属性。以下是一个快速示例,您可以填写其余部分:

<DataGrid x:Name="someGrid">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding SomeProperty, UpdateSourceTrigger=PropertyChanged}" />
    </DataGrid.Columns>
</DataGrid>

我已经在代码后台将UpdateSourceTrigger=PropertyChanged设置为绑定datatable到网格。这不应该足够了吗? - Steinthor.palsson
我尝试像这样设置列的绑定 [ Binding="{Binding Path=isfinished, UpdateSourceTrigger=PropertyChanged}" ] (isfinished是我的数据表中的一列),但行为相同。 - Steinthor.palsson
5
是的,我进行了一些测试。看来问题出在数据网格本身,而不是绑定上。它只有在单元格失去焦点后才会“结束”编辑模式。 - Steinthor.palsson

6
数据表(DataGrid)本身会将除了模板列(template columns)之外的所有列的UpdateSourceTrigger设置为LostFocus,这是无法覆盖的。因此需要使用带有复选框模板的模板列(template columns)。
编辑:这只是关于DataGrid列的一系列愚蠢的问题之一。更多内容可以在这里中找到。

1
这里还有更多关于 DataGrid 的陷阱 - Felipe Romero
1
原始的“gotchas”列表已存档到此处:https://learn.microsoft.com/en-gb/archive/blogs/vinsibal/5-random-gotchas-with-the-wpf-datagrid - user3717478

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接