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