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

时间:2018-08-15 22:30:53

标签: c# wpf wpfdatagrid

所以,我有这个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;

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

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

更新1: 我已经更新了XAML,将TwoWay-Binding合并为:

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

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

1 个答案:

答案 0 :(得分:1)

我看到您已经弄清楚Mode=TwoWay(无论如何都没有必要,因为如果您没有明确设置它,它就是默认值)。现在,您只需将UpdateSourceTrigger设置为PropertyChanged

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