WPF绑定DataGridCheckBoxColumn没有更新
本文关键字:更新 DataGridCheckBoxColumn 绑定 WPF | 更新日期: 2023-09-27 18:10:27
我正试图找出如何正确处理DataGridCheckBoxColumn
。我有一个数据列表,其中包括一个"发布"选项。选中后,该对象被标记为要发布到不同的服务器。到目前为止,我有:
<DataGrid x:Name="grdEducationalPopups"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="19,155,0,0"
AlternationCount="2"
AutoGenerateColumns="False"
ItemsSource="{Binding PopupCollection}"
Loaded="grdEducationalPopups_Loaded"
MinRowHeight="26"
RowDetailsTemplate="{StaticResource RowDetailTemplate}" RowDetailsVisibilityChanged="grdEducationalPopups_RowDetailsVisibilityChanged" SelectionChanged="grdEducationalPopups_SelectionChanged" Grid.ColumnSpan="2">
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<ToggleButton x:Name="RowHeaderToggleButton" Click="ToggleButton_Click" Cursor="Hand"/>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.Columns>
<DataGridTextColumn Width="150" Binding="{Binding DisplayName}" Header="Form Name" IsReadOnly="True"/>
<DataGridTextColumn Width="280" Binding="{Binding URLLocation}" Header="Page Address"/>
<DataGridTextColumn Width="125" Binding="{Binding DateLastTouched}" Header="Date Modified" IsReadOnly="True"/>
<DataGridTextColumn Width="125" Binding="{Binding DateRowAdded}" Header="Date Added" IsReadOnly="True"/>
<DataGridCheckBoxColumn Header="Publish" Binding="{Binding Path=Publish}">
<DataGridCheckBoxColumn.CellStyle>
<Style>
<EventSetter Event="CheckBox.Checked" Handler="OnChecked"/>
</Style>
</DataGridCheckBoxColumn.CellStyle>
</DataGridCheckBoxColumn>
</DataGrid.Columns>
</DataGrid>
我确实有OnClick代码,但它现在不做任何事情,除了允许我检查值。发布列表中的值不会更改。当给定记录的发布值应该为真时,它仍然是false
。如果我将默认值从false更改为true并启动应用程序,那么所有复选框都会被选中,这正是我所期望的。这告诉我绑定是正确的。
我如何正确地管理用户更改,以便我可以适当地对更改采取行动?在我后面的代码中,我得到一个DataGridCell对象,并可以从那里确定行数据,我想编辑该数据。但是我的印象是绑定数据应该可以处理这个问题。
您的代码没有任何问题。只是值没有立即更新,只有在ComboBox
失去焦点后才会更新。
您可以通过在绑定上设置UpdateSourceTrigger=PropertyChanged
来改变它。
<DataGridCheckBoxColumn Header="Publish" Binding="{Binding Path=Publish, UpdateSourceTrigger=PropertyChanged}">
我不喜欢在后台工作,而是在ViewModel中管理它。我现在没有执行您的代码,但首先,我将配置CheckBoxColumn的绑定,如
Binding="{Binding Path=Publish, Mode=TwoWay}"
在Publish属性的setter中,您可以编写业务逻辑。如果它非常耗时(访问网络经常是),我也建议异步执行。
如果你需要,我可以提供一个简单的例子。但在其他线程中应该已经有很多了。