所以,我有这个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}"/>
数据源变量仍然没有更新。
答案 0 :(得分:1)
我看到您已经弄清楚Mode=TwoWay
(无论如何都没有必要,因为如果您没有明确设置它,它就是默认值)。现在,您只需将UpdateSourceTrigger
设置为PropertyChanged
。
<DataTemplate>
<CheckBox IsChecked="{Binding enabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>