WPF DataGrid 不会将更改的值保存到变量

WPF DataGrid does not save changed value to variable

所以,我有这个 WPF 小片段:

<DataGrid x:Name="lstCategories" AutoGenerateColumns="False" Grid.Row="0"
              Margin="5,5,5,5" ScrollViewer.CanContentScroll="True" SelectionMode="Single" CanUserSortColumns="False" CanUserReorderColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.Header>
                    <DataGridColumnHeader Tag="All" Click="DataGridColumnHeader_Click">All</DataGridColumnHeader>
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding enabled}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="Category" Width="Auto" IsReadOnly="True" Binding="{Binding category}" />
        </DataGrid.Columns>
    </DataGrid>

其中显示的数据如下:

lstCategories.ItemsSource = categoryList;

现在,当用户单击复选框时,我希望数据网格将此更改写入 categoryListItem.enabled,但是当我检查该值时,无论如何它都会显示 true。 如何使 DataGrid 存储对其用作数据源的变量的更改?

附加信息:我选择了带有嵌入式复选框的 TemplateColumn 方法,因为这样用户不必单击两次来修改复选框。

更新 1: 我更新了 XAML 以将 TwoWay-Binding 合并为:

<CheckBox IsChecked="{Binding enabled, Mode=TwoWay}"/>

数据源变量仍然没有更新。

我看到你已经弄清楚了 Mode=TwoWay(这不是必需的,因为如果你没有明确设置它,它就是默认值)。现在您所要做的就是将 UpdateSourceTrigger 设置为 PropertyChanged.

<DataTemplate>
    <CheckBox IsChecked="{Binding enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>